JavaMail – 发件人地址被拒绝:访问被拒绝
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了JavaMail – 发件人地址被拒绝:访问被拒绝,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4695字,纯文字阅读大概需要7分钟。
内容图文
![JavaMail – 发件人地址被拒绝:访问被拒绝](/upload/InfoBanner/zyjiaocheng/792/d56c6538ebd6421a9d5667ffd9969d18.jpg)
好的,我不知道还能做什么.一周前,当我编写并测试它时,这段代码完美无缺.然后我将它嵌入到我的程序中,并意识到我不断获得异常.一切似乎都很正常.发件人地址是合法的.我用来测试它的收件人地址是合法的.怎么了?我很沮丧:
private String outgoingMailServer = "smtp.mail.yahoo.com";
boolean debug = true;
//set the host outgoing mail smtp server.
Properties properties = new Properties();
properties.put("mail.smtp.host", outgoingMailServer);
properties.put("mail.smtp.auth", "true");
Authenticator authenticator = new SMTPAuthentication();
Session session = Session.getDefaultInstance(properties, authenticator);
session.setDebug(debug);
//create a message session
Message msg = new MimeMessage(session);
//set the addresses, to and from
InternetAddress fromAddress;
fromAddress = new InternetAddress(emailFromAddress);
msg.setFrom(fromAddress);
//since mail can be sent to more than one recipient, create loop
//to add all addresses into InternetAddress, addressTo.
//InternetAddress[] toAddress = new InternetAddress[recipients.length];
InternetAddress[] toAddress = new InternetAddress[recipients.size()];
for (int i = 0; i < recipients.size(); i++) {
toAddress[i] = new InternetAddress(recipients.get(i));
}
msg.setRecipients(Message.RecipientType.TO, toAddress);
//set the subject and content type
msg.setSubject(emailSubject);
msg.setContent(actualMessage, "text/html; charset=utf-8");
//send the email
Transport.send(msg);
因此例外是:
javax.mail.SendFailedException: Invalid Addresses;
nested exception is:
com.sun.mail.smtp.SMTPAddressFailedException: 554 5.7.1 <blank@yahoo.com>: Sender address rejected: Access denied
at com.sun.mail.smtp.SMTPTransport.rcptTo(SMTPTransport.java:1835)
at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1098)
at javax.mail.Transport.send0(Transport.java:195)
at javax.mail.Transport.send(Transport.java:124)
at internalLogicEngine.LogicEngine.sendReminder(LogicEngine.java:4282)
at testPackage.Test.main(Test.java:169)
Caused by: com.sun.mail.smtp.SMTPAddressFailedException: 554 5.7.1 <blank@yahoo.com>: Sender address rejected: Access denied
at com.sun.mail.smtp.SMTPTransport.rcptTo(SMTPTransport.java:1733)
... 5 more
非常感激任何的帮助.谢谢!
解决方法:
最后想出了一个解决方法(虽然我仍然无法理解为什么首先出现问题,看看代码是用来工作的.无论如何…)
private String outgoingMailServer = "smtp.mail.yahoo.com";
boolean debug = false;
//set the host outgoing mail smtp server.
Properties properties = new Properties();
properties.put("mail.smtp.host", outgoingMailServer);
properties.put("mail.smtps.auth", "true");
Authenticator authenticator = new SMTPAuthentication();
Session session = Session.getDefaultInstance(properties, authenticator);
session.setDebug(debug);
//create a message session
Message msg = new MimeMessage(session);
//set the addresses, to and from
InternetAddress fromAddress;
fromAddress = new InternetAddress(emailFromAddress);
msg.setFrom(fromAddress);
//since mail can be sent to more than one recipient, create loop
//to add all addresses into InternetAddress, addressTo.
//InternetAddress[] toAddress = new InternetAddress[recipients.length];
InternetAddress[] toAddress = new InternetAddress[recipients.size()];
for (int i = 0; i < recipients.size(); i++) {
toAddress[i] = new InternetAddress(recipients.get(i));
}
msg.setRecipients(Message.RecipientType.TO, toAddress);
//set the subject and content type
msg.setSubject(emailSubject);
msg.setContent(actualMessage, "text/html; charset=utf-8");
//send the email
Transport transport = session.getTransport("smtps");
transport.connect(outgoingMailServer, 465, emailUserName, emailPassword);
transport.sendMessage(msg, msg.getAllRecipients());
transport.close();
//email sent
//note, this does not necessarily mean the email was delivered. The
//sysetm has no control over that
emailSent = true;
您会发现问题中的代码与这些代码之间的主要区别是:
Transport.send(msg);
和
Transport transport = session.getTransport("smtps");
transport.connect(outgoingMailServer, 465, emailUserName, emailPassword);
transport.sendMessage(msg, msg.getAllRecipients());
transport.close();
事实证明,必须使用适当的凭据(端口号,用户名,密码和邮件服务器)创建和连接传输对象.
此外,我做了一个消除过程,发现只要你有这个:
Transport transport = session.getTransport("smtps");
transport.connect(outgoingMailServer, 465, emailUserName, emailPassword);
transport.sendMessage(msg, msg.getAllRecipients());
transport.close();
你不需要这个:
Authenticator authenticator = new SMTPAuthentication();
Session session = Session.getDefaultInstance(properties, authenticator);
以上也可以是:
Session session = Session.getDefaultInstance(properties, null);
无论如何,这就是答案.你也可以改变这个gmail的答案.只需确保将外发邮件服务器更改为gmail,以及来自电子邮件地址,用户名和密码,您就可以了:)
内容总结
以上是互联网集市为您收集整理的JavaMail – 发件人地址被拒绝:访问被拒绝全部内容,希望文章能够帮你解决JavaMail – 发件人地址被拒绝:访问被拒绝所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。