android JavaMail报错:SendFailedException: No recipient addresses


​​​​​​​

 

使用环境:

        使用JavaMail IMAP处理邮件遇到SendFailedException: No recipient addresses报错

处理方式:

        报错提示内容:没有接受者地址

        查看邮件属性 SendEmailModel.setTo(接受者邮箱号)是否为空。

### 解决方案 当遇到 `javax.mail.SendFailedException` 和 `SMTPAddressFailedException: 535 ERR.LOGIN.DOMAINNOTEXIST` 错误时,通常是因为缺少必要的配置或者目标域名不存在。以下是详细的解决方案: #### 1. 添加 JavaMail 的必要属性 确保在程序中正确设置了 `javaMailProperties` 属性。如果这些属性缺失,则可能导致无法验证地址或登录失败。 ```properties mail.smtp.auth=true mail.smtp.starttls.enable=true mail.smtp.host=smtp.example.com mail.smtp.port=587 ``` 以上配置中的主机名 (`smtp.example.com`) 和端口号 (587) 应替换为目标邮件服务器的实际值[^1]。 #### 2. 处理认证失败问题 如果出现类似于 `AuthenticationFailedException` 或者 `ERR.LOGIN.DOMAINNOTEXIST` 的错误,可能的原因包括用户名/密码不匹配、域名称解析失败等。可以通过以下方式解决: - **确认账户凭证**:检查用于连接 SMTP 服务器的用户名和密码是否有效。 - **启用 SSL/TLS 加密**:某些邮件服务商强制要求安全传输协议。可以尝试如下设置来开启 SSL 支持: ```java // 开启 SSL 加密 MailSSLSocketFactory sf = new MailSSLSocketFactory(); sf.setTrustAllHosts(true); props.put("mail.smtp.ssl.enable", "true"); props.put("mail.smtp.ssl.socketFactory", sf); ``` 此部分代码片段展示了如何通过自定义 `MailSSLSocketFactory` 来信任所有主机并激活 SSL 功能[^4]。 #### 3. 检查收件人列表的有效性 有时即使发信方配置无误,但如果存在无效的目标邮箱也会引发类似的异常信息。例如离职员工的邮箱被关闭后继续向其发送消息就会触发此类警告[^5]。因此建议定期清理不再使用的联系人记录以减少不必要的麻烦。 #### 4. 参考官方文档获取更多参数详情 对于特定的服务提供商来说,它们可能会给出额外的要求或是推荐的最佳实践指南。所以最好查阅对应平台的帮助中心页面寻找更精确的信息[^3]。 --- ### 示例代码 下面是一个完整的例子展示怎样利用上述提到的技术要点构建一个简单的电子邮件客户端应用: ```java import java.util.Properties; import javax.mail.*; import javax.mail.internet.*; public class EmailSender { public static void main(String[] args){ String host="smtp.example.com"; // 更改为实际SMTP服务器地址 final String user="your-email@example.com"; final String password="your-password"; Properties props=new Properties(); props.put("mail.smtp.auth","true"); props.put("mail.smtp.starttls.enable","true"); props.put("mail.smtp.host",host); props.put("mail.smtp.port","587"); try{ Session session=Session.getInstance(props,new Authenticator(){ protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(user,password); } }); Message message=new MimeMessage(session); message.setFrom(new InternetAddress(user)); message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("recipient@example.com")); message.setSubject("Test Subject"); message.setText("This is a test email."); Transport.send(message); System.out.println("Email sent successfully."); }catch(Exception e){ e.printStackTrace(); } } } ``` 注意这里仅作为演示用途,请根据实际情况调整相关变量值以及处理可能出现的各种例外情况。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值