Groovyスクリプトでjavamailを使用して、Gmail経由でメールを送信しようとしています。私は多くの場所をオンラインで見てきましたが、今のところ機能させることができませんでした。スクリプトを実行するとエラーが発生します:
DEBUG SMTP: useEhlo true, useAuth false
DEBUG SMTP: trying to connect to Host "smtp.gmail.com", port 25, isSSL false
Caught: javax.mail.SendFailedException: Send failure (javax.mail.MessagingException: Could not connect to SMTP Host: smtp.gmail.com, port: 25 (javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?))
ポート587を使用するように指定しているにもかかわらず、ポート25を使用しようとしているようです。この問題の原因を知っている人はいますか。 STARTTLSセキュリティを備えたポート587で、smtpサーバーを使用してメールを正常に送信できます。これは、ブロックされたポートまたは接続の問題ではないことを示しています。メールを送信しようとするために使用しているコードは次のとおりです。
import javax.mail.*
import javax.mail.internet.*
private class SMTPAuthenticator extends Authenticator
{
public PasswordAuthentication getPasswordAuthentication()
{
return new PasswordAuthentication('[email protected]', 'password');
}
}
def d_email = "[email protected]",
d_password = "password",
d_Host = "smtp.gmail.com",
d_port = "587", //465,587
m_to = "[email protected]",
m_subject = "Testing",
m_text = "This is a test."
def props = new Properties()
props.put("mail.smtp.user", d_email)
props.put("mail.smtp.Host", d_Host)
props.put("mail.smtp.port", d_port)
props.put("mail.smtp.starttls.enable","true")
props.put("mail.smtp.debug", "true");
props.put("mail.smtp.auth", "true")
props.put("mail.smtp.socketFactory.port", d_port)
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory")
props.put("mail.smtp.socketFactory.fallback", "false")
def auth = new SMTPAuthenticator()
def session = Session.getInstance(props, auth)
session.setDebug(true);
def msg = new MimeMessage(session)
msg.setText(m_text)
msg.setSubject(m_subject)
msg.setFrom(new InternetAddress(d_email))
msg.addRecipient(Message.RecipientType.TO, new InternetAddress(m_to))
Transport.send(msg)
どんな助けも大歓迎です。前もって感謝します!
-ブライアン
Javaでは、次のようなことを行います。
Transport transport = session.getTransport("smtps");
transport.connect (smtp_Host, smtp_port, smtp_username, smtp_password);
transport.sendMessage(msg, msg.getAllRecipients());
transport.close();
「smtpS」プロトコルに注意してください。また、socketFactoryプロパティは最新のJVMでは不要になりましたが、Gmailの「mail.smtps.auth」と「mail.smtps.starttls.enable」を「true」に設定する必要がある場合があります。 「mail.smtps.debug」も役立ちます。
完全なソリューションを探している人のために、maximdimの答えに基づいて次のコードでこれを機能させました:
import javax.mail.*
import javax.mail.internet.*
private class SMTPAuthenticator extends Authenticator
{
public PasswordAuthentication getPasswordAuthentication()
{
return new PasswordAuthentication('[email protected]', 'test1234');
}
}
def d_email = "[email protected]",
d_uname = "email",
d_password = "password",
d_Host = "smtp.gmail.com",
d_port = "465", //465,587
m_to = "[email protected]",
m_subject = "Testing",
m_text = "Hey, this is the testing email."
def props = new Properties()
props.put("mail.smtp.user", d_email)
props.put("mail.smtp.Host", d_Host)
props.put("mail.smtp.port", d_port)
props.put("mail.smtp.starttls.enable","true")
props.put("mail.smtp.debug", "true");
props.put("mail.smtp.auth", "true")
props.put("mail.smtp.socketFactory.port", d_port)
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory")
props.put("mail.smtp.socketFactory.fallback", "false")
def auth = new SMTPAuthenticator()
def session = Session.getInstance(props, auth)
session.setDebug(true);
def msg = new MimeMessage(session)
msg.setText(m_text)
msg.setSubject(m_subject)
msg.setFrom(new InternetAddress(d_email))
msg.addRecipient(Message.RecipientType.TO, new InternetAddress(m_to))
Transport transport = session.getTransport("smtps");
transport.connect(d_Host, 465, d_uname, d_password);
transport.sendMessage(msg, msg.getAllRecipients());
transport.close();
この問題に直面している他の人に役立つかもしれません:プロパティでポートを設定するとき:
props.put("mail.smtp.port", smtpPort);
..必ず文字列オブジェクトを使用してください。数値(つまりLong)オブジェクトを使用すると、このステートメントは効果がないように見えます。