Skip to content
shunter1112 edited this page Sep 14, 2013 · 9 revisions

SendGridはアプリケーションへ、スケール可能なemail配信機能、及び解析機能を提供するアドオンです。

SendGridのクラウドベースのインフラは、独自に作成したemailシステムをメンテナンスするコストと煩雑さを軽減してくれます。SendGridは、信頼のおける配信、スケーラビリティ、リアルタイムでの解析といった機能を提供します。カスタムでインテグレーションする際にも、柔軟なAPIが作業を容易にしてくれます。

アドオンの提供

SendGridは、CLIを経由してHerokuのアプリケーションにアタッチ可能です。:

こちらで現在利用可能な各種プランを参照することが出来ます。
:::term
$ heroku addons:add sendgrid:starter
-----> Adding sendgrid:starter to sharp-mountain-4005... done, v18 (free)

一度、SendGridがSENDGRID_USERNAMEを追加すると、アプリケーションのコンフィグ内でSENDGRID_PASSWORDの設定が可能となり、新たに提供されたSendGridインスタンスへのアクセス証明書が発行されます。heroku config:getコマンドを使用することで、確定されます。

:::term
$ heroku config:get SENDGRID_USERNAME
[email protected]

$ heroku config:get SENDGRID_PASSWORD
password

SendGridをインストール後、アプリケーションはアドオンと完全に統合されるよう設定されます。

Ruby / Rails

RailsとActionMailerを使用していない場合、または、Cedarのスタックを使用している場合は、emailのフレームワークを手動でセットアップする必要があります。下記の例を参照して下さい。

RailsアプリケーションがActionMailerを使用している場合で、かつBambooのスタック上で動作させている場合、アドオンインストール後、git pushすることで、Heroku側がアプリケーションを自動的に設定します。

ActionMailer

Bambooでは、Railsに対し、ActionMailerを自動設定するプラグインがインストールされますので、注意して下さい。Cedar、または、Bamboo上のRails以外のアプリケーションでは、下記のセッティングが必要となります。

config/environment.rb

:::ruby
ActionMailer::Base.smtp_settings = {
  :address        => 'smtp.sendgrid.net',
  :port           => '587',
  :authentication => :plain,
  :user_name      => ENV['SENDGRID_USERNAME'],
  :password       => ENV['SENDGRID_PASSWORD'],
  :domain         => 'heroku.com',
  :enable_starttls_auto => true
}

Pony

我々は、開発者の皆さんに、ActionMailerよりシンプルで、net/smtpよりも便利なPonyに目を通すことを推奨しています。

:::ruby
Pony.options = {
  :via => :smtp,
  :via_options => {
    :address => 'smtp.sendgrid.net',
    :port => '587',
    :domain => 'heroku.com',
    :user_name => ENV['SENDGRID_USERNAME'],
    :password => ENV['SENDGRID_PASSWORD'],
    :authentication => :plain,
    :enable_starttls_auto => true
  }
}

Mail

Mail gemをインストールします。: gem install mail

SendGridを通してメールを送るためには、Mailクラスが適切な値を持つように設定する必要があります :

:::ruby
require 'mail'

Mail.defaults do
  delivery_method :smtp, {
    :address => 'smtp.sendgrid.net',
    :port => '587',
    :domain => 'heroku.com',
    :user_name => ENV['SENDGRID_USERNAME'],
    :password => ENV['SENDGRID_PASSWORD'],
    :authentication => :plain,
    :enable_starttls_auto => true
  }
end

メールを送ります。

:::ruby
Mail.deliver do
  to '[email protected]'
  from '[email protected]'
  subject 'testing send mail'
  body 'Sending email with Ruby through SendGrid!'
end

Node.js

Sendgridのモジュールは、Cedar上で、完全にテストが完了しており、動作が保証されています。

SendGridには、2人のコアな開発者がコーディングし、メンテナンスしているNode.jsのパッケージがあります。 コードが、Github上にあり、オープンソースで利用可能となっています。

以下の設定をpackage.jsonファイルに追加してください。

package.json


:::javascript
{
  "name": "node-sendgrid-example",
  "version": "0.0.1",
  "dependencies": {
    "express": "3.1.x",
    "sendgrid": "0.3.0-rc.1.7"
  },
  "engines": {
    "node": ">= 0.4.7"
  }
}

以下のコマンドを使ってローカルでSendgridをインストールしてください : npm install

program.js


このライブラリを使うために、あなたのSendGridの認証情報でsendgridオブジェクトを初期化してください :

:::javascript
var sendgrid  = require('sendgrid')(
  process.env.SENDGRID_USERNAME,
  process.env.SENDGRID_PASSWORD
);

メールを送信します

:::javascript
sendgrid.send({
  to: '[email protected]',
  from: '[email protected]',
  subject: 'Hello World',
  text: 'Sending email with NodeJS through SendGrid!'
}, function(err, json) {
if (err) { return console.error(err); }
  console.log(json);
});

SendGridのNode.jsパッケージに関するドキュメントは、 Githubで参照することが可能です。

Java

このJavaプログラムは、MIMEマルチパート形式のemailを作成し、SendGridを通して送信されます。Javaは既にメールの送受信機能をライブラリに備えています。この例では、javamailを使用しています。

pom.xmlへ下記の属性を追加して下さい。:

::xml
<dependency>
    <groupId>javax.activation</groupId>
    <artifactId>activation</artifactId>
    <version>1.1</version>
</dependency>
<dependency>
    <groupId>javax.mail</groupId>
    <artifactId>mail</artifactId>
    <version>1.4</version>
</dependency>

Java class:

:::java
import javax.mail.*;
import javax.mail.internet.*;
import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;
import java.util.Properties;

public class SimpleMail {

    private static final String SMTP_HOST_NAME = "smtp.sendgrid.net";
    private static final String SMTP_AUTH_USER = System.getenv("SENDGRID_USERNAME");
    private static final String SMTP_AUTH_PWD  = System.getenv("SENDGRID_PASSWORD");

    public static void main(String[] args) throws Exception{
        new SimpleMail().test();
    }

    public void test() throws Exception{
        Properties props = new Properties();
        props.put("mail.transport.protocol", "smtp");
        props.put("mail.smtp.host", SMTP_HOST_NAME);
        props.put("mail.smtp.port", 587);
        props.put("mail.smtp.auth", "true");

        Authenticator auth = new SMTPAuthenticator();
        Session mailSession = Session.getDefaultInstance(props, auth);
        // uncomment for debugging infos to stdout
        // mailSession.setDebug(true);
        Transport transport = mailSession.getTransport();

        MimeMessage message = new MimeMessage(mailSession);

        Multipart multipart = new MimeMultipart("alternative");

        BodyPart part1 = new MimeBodyPart();
        part1.setText("This is multipart mail and u read part1......");

        BodyPart part2 = new MimeBodyPart();
        part2.setContent("<b>This is multipart mail and u read part2......</b>", "text/html");

        multipart.addBodyPart(part1);
        multipart.addBodyPart(part2);

        message.setContent(multipart);
        message.setFrom(new InternetAddress("[email protected]"));
        message.setSubject("This is the subject");
        message.addRecipient(Message.RecipientType.TO,
            new InternetAddress("[email protected]"));

        transport.connect();
        transport.sendMessage(message,
        message.getRecipients(Message.RecipientType.TO));
        transport.close();
    }

    private class SMTPAuthenticator extends javax.mail.Authenticator {
        public PasswordAuthentication getPasswordAuthentication() {
            String username = SMTP_AUTH_USER;
            String password = SMTP_AUTH_PWD;
            return new PasswordAuthentication(username, password);
        }
    }
}

ダッシュボード

SendGridのダッシュボードに関するより詳しい機能説明については、sendgrid.com/docsのドキュメントを参照して下さい。

SendGridは、メッセージに今何が起こっているのかをレポートする多くの統計情報を提供してくれます。 ScreenShot

ダッシュボードへは、CLIを経由してアクセス可能です:

:::term
$ heroku addons:open sendgrid
Opening sendgrid for sharp-mountain-4005…

または、Heroku apps web interfaceを訪問し、統計を確認したいアプリケーションを選択後、アドオンメニューからSendGridを選択して下さい。

各種プラン間でのマイグレート

プランのマイグレーションは、簡単に素早く行えます。新たなプランへのマイグレートは、heroku addons:upgradeコマンドを使用して下さい。

:::term
$ heroku addons:upgrade sendgrid:platinum
-----> Upgrading sendgrid:platinum to sharp-mountain-4005... done, v18 ($399.95/mo)
       Your plan has been updated to: sendgrid:platinum

アドオンのリムーブ

SendGridは、CLI経由でリムーブ可能です。もし、誤ってSendGridをリムーブしてしまった場合、SendGridを再追加することで、アカウントのアクセスを復旧してくれるでしょう。

:::term
$ heroku addons:remove sendgrid
-----> Removing sendgrid from sharp-mountain-4005... done, v20 (free)

サポート

SendGridへのサポートとランタイムの問題は全て、Heroku Support channelsを経由して提示して下さい。サポート対象外の問題やプロダクトへのフィードバックに関しても、歓迎しています。こちらで情報を提供して下さい。http://support.sendgrid.com/home

その他のリソース

その他のリソースが以下で利用可能です。:

Clone this wiki locally