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