GoogleCloudからメール送信する(JavaMail&Gmail、G Suite)

Google Cloud開発関連

Googleに限らずですが、問合せフォームなどちょっとしたメールを送りたくてもセキュリティの関係でSMTPのポートが封じられているためSendGridやMailgunなどのサービスを使う必要があります。
ただ、SendGridはIPを健全に保つために色々ルールが厳しくてbounceが多発すると急にアカウント停止をくらうリスクがかなり高いです・・・
なので少量のメールや送達確認ができていないメール宛の送信にはGmailやG Suiteを使って送信した方が簡単&安全かと思います。

GmailやG Suiteの送信制限について

1日あたりの送信制限などがあるので注意が必要です。

1日あたりの送信上限
Gmail2,000通
G Suite10,000通(ユーザ数により変わる)

よりシビアに条件を確認する必要がある場合はドキュメントみてください。

外部からアクセスするための認証設定

これをやらないとJavaMailで送信時にこんな感じのエラーがでます。

javax.mail.AuthenticationFailedException: 535-5.7.8 Username and Password not accepted. Learn more at
535 5.7.8  https://support.google.com/mail/?p=BadCredentials - gsmtp

        at com.sun.mail.smtp.SMTPTransport$Authenticator.authenticate(SMTPTransport.java:892)
        at com.sun.mail.smtp.SMTPTransport.authenticate(SMTPTransport.java:814)
        at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:728)
        at javax.mail.Service.connect(Service.java:386)
        at javax.mail.Service.connect(Service.java:245)
        at javax.mail.Service.connect(Service.java:194)
        at javax.mail.Transport.send0(Transport.java:253)
        at javax.mail.Transport.send(Transport.java:124)

Gmailの場合

Appからのアクセスを許可します。2段階認証がONになってるとできないかもしれません。

G Suiteの場合

ここ見て設定してください。

JavaMailから送信する

プログラムの書き方は省略します。使った設定の抜粋だけ残しておきます。

ちなみにGmailの場合、SSLをONにするとこんな感じのエラーになりました。

javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com, port: 587
	at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:2055)
	at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:697)
	at javax.mail.Service.connect(Service.java:386)
	at javax.mail.Service.connect(Service.java:245)
	at javax.mail.Service.connect(Service.java:194)
	at javax.mail.Transport.send0(Transport.java:253)
	at javax.mail.Transport.send(Transport.java:124)
Caused by: javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
	at sun.security.ssl.InputRecord.handleUnknownRecord(InputRecord.java:710)
	at sun.security.ssl.InputRecord.read(InputRecord.java:527)
	at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:961)
	at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1363)
	at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1391)
	at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1375)
	at com.sun.mail.util.SocketFetcher.configureSSLSocket(SocketFetcher.java:543)
	at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:348)
	at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:236)
	at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:2019)

成功した設定の抜粋

SMTP認証ありです。

mail.smtp.host="smtp.gmail.com"
mail.smtp.socketFactory.port="587"
mail.smtp.socketFactory.fallback=true
mail.smtp.starttls.enable=true
mail.smtp.auth=true
mail.smtp.port="587"

やっぱりSendgridを使いたい場合

ドキュメントはここです。大量配信しない場合はpostfixを使うのが楽だと思います

©2018 LLC Shimer-System.
image/svg+xml