Android 发送自定义电子邮件 STARTTLS 端口 587

Posted

技术标签:

【中文标题】Android 发送自定义电子邮件 STARTTLS 端口 587【英文标题】:Android send custom email STARTTLS port 587 【发布时间】:2015-06-16 17:20:43 【问题描述】:

我需要使用客户端设置发送电子邮件。使用端口 587 访问主机使用 STARTTLS 安全性。 使用以下代码进行测试(为安全起见更改了客户数据):

String host = "zimbra.mydomain.net.br";
        String port = "587";
        String address = "mail@mydomain.net.br";
        String pass = "******";

        Properties props = new Properties();
        props.put("mail.transport.protocol", "smtp");
        props.put("mail.smtp.quitwait", "false");
        props.put("mail.smtp.host", host); 
        props.put("mail.smtp.user", address); 
        props.put("mail.smtp.password", pass); 
        props.put("mail.smtp.port", port); 
        props.put("mail.smtp.ssl.trust", "*");

        Session session = Session.getDefaultInstance(props, null);

        MimeMessage message = new MimeMessage(session);
        message.setFrom(new InternetAddress(address));

        Multipart multiPart=new MimeMultipart();

        InternetAddress toAddress = new InternetAddress("rnn2@live.com"); 
        message.addRecipient(Message.RecipientType.TO, toAddress);

        message.setSubject("Send Auto-Mail"); 
        message.setContent(multiPart); 
        message.setText("Demo For Sending Mail in android Automatically");

        Transport transport = session.getTransport("smtp");
        transport.connect(host, address, pass);

        transport.sendMessage(message, message.getAllRecipients());
        transport.close();        

例外:

javax.mail.SendFailedException:无效地址; 嵌套异常是: com.sun.mail.smtp.SMTPAddressFailedException:554 5.7.1 unknown[000.000.000.00]:客户端主机被拒绝:访问被拒绝

-- 编辑--

调试:getProvider() 返回 javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc.,1.4.1] 调试 SMTP:useEhlo true,useAuth false 调试 SMTP:尝试连接到主机“zimbra.myclientaddress.net.br”,端口 587,isSSL false 220 zimbra.myclientaddress.net.br ESMTP 后缀 调试 SMTP:连接到主机“zimbra.myclientaddress.net.br”,端口:587 EHLO 本地主机 250-zimbra.myclientaddress.net.br 250-流水线 250 尺寸 1741203456 250-VRFY 250-ETRN 250-STARTTLS 250 个增强状态代码 250-8BITMIME 250 DSN 调试 SMTP:找到扩展名“PIPELINING”,arg“” 调试 SMTP:找到扩展名“SIZE”,arg“1741203456” 调试 SMTP:找到扩展名“VRFY”,arg“” 调试 SMTP:找到扩展名“ETRN”,arg“” 调试 SMTP:找到扩展名“STARTTLS”,arg“” 调试 SMTP:找到扩展名“ENHANCEDSTATUSCODES”,arg“” 调试 SMTP:找到扩展名“8BITMIME”,arg“” 调试 SMTP:找到扩展名“DSN”,arg“” 调试 SMTP:use8bit false 发件人: 250 2.1.0 好的 RCPT 收件人: 554 5.7.1:客户端主机被拒绝:访问被拒绝 调试 SMTP:地址无效 调试 SMTP:rnn2@live.com 调试 SMTP:由于目标地址无效,发送失败 RSET 250 2.0.0 好的

【问题讨论】:

【参考方案1】:

服务器似乎拒绝了您的请求,可能是基于您的 IP 地址,也可能是基于发件人或收件人地址。添加session.setDebug(true) 并检查调试输出以获取有关失败原因的更多线索。

另外,你可能想change Session.getDefaultInstance to Session.getInstance。

【讨论】:

我激活了 session.setDebug (true) 并在我的问题描述中输入了收集的信息。请检查,服务器是否拒绝与电子邮件地址相同的 IP 地址是有效地址。 您使用的是非常旧的 JavaMail 版本。因此,您没有对您的邮件服务器进行身份验证。升级到latest version,我认为它会解决您的问题。如果这不可行,请将“mail.smtp.auth”设置为“true”,看看是否有帮助。 我更新到最新版本的JavaMail并试听不成功,然后将属性“mail.smtp.auth”插入true,仍然失败,也抛出了同样的异常。 javax.mail.SendFailedException:地址无效;嵌套异常是:com.sun.mail.smtp.SMTPAddressFailedException: 554 5.7.1 :客户端主机被拒绝:访问被拒绝 我在原生 android 客户端电子邮件中添加了这个电子邮件帐户,它工作正常,然后邮件服务器正常,问题确实出在我的代码中。

以上是关于Android 发送自定义电子邮件 STARTTLS 端口 587的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 laravel 发送自定义电子邮件通知?

logback 发送邮件和自定义发送邮件;java类发送邮件

iPhone:使用自定义内容类型发送电子邮件

在 X 天 WooCommerce 订单后发送自定义电子邮件 [重复]

使用没有自定义域的 AWS SES 发送电子邮件

如何使用 Firebase 云功能发送自定义电子邮件