javamail发邮件出现Sending failed because of invalid destination addresses

gcxyshiyu 2010-01-24 10:52:13
代码如下:
request.setCharacterEncoding("GB2312");
MultipartRequest multi=new MultipartRequest(request,".",5*1024*1024,"GB2312"); //使用cos 组件
String from=multi.getParameter("from");
String to=multi.getParameter("to");
String subject=multi.getParameter("subject");
String content=multi.getParameter("content"); //附件
String fileName=multi.getFilesystemName("attachment"); //取得系统文件名
try
{
Properties pro=System.getProperties();
pro.put("mail.host","smtp.163.com");
pro.put("mail.smtp.auth","true");
Session sess=Session.getInstance(pro,new Authenticator()
{
public PasswordAuthentication getPasswordAuthentication()
{
return new PasswordAuthentication("用户名","密码");
}
});
Message message=new MimeMessage(sess);
message.setFrom(new InternetAddress(from));
message.setRecipient(Message.RecipientType.TO,new InternetAddress(to));
message.setSubject(subject);
if(fileName!=null) //判断文件是否存在
{
File fil=new File(fileName); //创建File对象
MimeBodyPart mbp1=new MimeBodyPart(); //mbp1代表mime类型(这里为邮件内容)的对象
mbp1.setContent(content,"text/plain;charset=gb2312"); //将邮件内容加到mbp1对象

MimeBodyPart mbp2=new MimeBodyPart(); //mbp2代表mime类型(这里为邮件附件)的对象
FileDataSource fds=new FileDataSource(fil); //创建文件数据源对象(JAF)
mbp2.setDataHandler(new DataHandler(fds));//设置数据处理类
mbp2.setFileName(MimeUtility.encodeText(fds.getName(),"gb2312","B"));
Multipart mp=new MimeMultipart(); //相当于容器,容纳BodyPart对象
mp.addBodyPart(mbp1);
mp.addBodyPart(mbp2); //将mbp1和mbp2对象加入容器中
message.setContent(mp); //设置邮件消息的内容
}
else
{
message.setContent(content,"text/plain;charset=gb2312");//如果没有附件,直接处理
}
Transport trans=sess.getTransport("smtp");
trans.send(message);
out.println("it is successful!");

}
catch(MessagingException e)
{
out.println(e.toString());
}


邮件服务器为server2003 outlook下可以给内外网发邮件,也可以接收邮件,此程序可以给内网发邮件,如果给163或者qq发邮件时会出现Invalid Addresses; nested exception is: class javax.mail.SendFailedException: 550 5.7.1 Unable to relay for gcxyshiyu@qq.com 这种错误,我不知道是程序出问题了,还是邮件服务器的配置有问题,希望大家能够帮忙解决一下,非常感谢!
...全文
1516 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
gege1019 2010-06-27
  • 打赏
  • 举报
回复
我和你的情况一样:
props.put("mail.smtp.host", "xxx.oicp.net");
props.put("mail.auth.user", "user_name");
props.put("mail.auth.passwd", "password");
props.put("mail.smtp.localhost", "xxx.oicp.net");
我用的是花生壳+winmail

DEBUG: setDebug: JavaMail version 1.3.3
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: trying to connect to host "192.168.0.101", port 25, isSSL false
220 ESMTP on WinWebMail [3.7.7.3] ready. http://www.winwebmail.com
DEBUG SMTP: connected to host "192.168.0.101", port: 25

EHLO xxx.oicp.net
250-SIZE
250 AUTH LOGIN
DEBUG SMTP: Found extension "AUTH", arg "LOGIN"
DEBUG SMTP: Attempt to authenticate
AUTH LOGIN
334 VXNlcm5hbWU6
bWFya2V0aW5n
334 UGFzc3dvcmQ6
enhjMTIz
235 Authentication successful.
DEBUG SMTP: use8bit false
MAIL FROM:<marketing@my56.oicp.net>
250 OK
RCPT TO:<marketing@my56.oicp.net>
250 OK, recipient accepted
RCPT TO:<>
504 input error.
RCPT TO:<>
504 input error.
DEBUG SMTP: Valid Unsent Addresses
DEBUG SMTP: marshall <marketing@my56.oicp.net>
DEBUG SMTP: Invalid Addresses
DEBUG SMTP:
DEBUG SMTP:
DEBUG SMTP: Sending failed because of invalid destination addresses
RSET
220 OK
QUIT
javax.mail.SendFailedException: Invalid Addresses;
nested exception is:
class com.sun.mail.smtp.SMTPAddressFailedException: 504 input error.
;
nested exception is:
class com.sun.mail.smtp.SMTPAddressFailedException: 504 input error.

at com.sun.mail.smtp.SMTPTransport.rcptTo(SMTPTransport.java:1141)
at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:536)
at javax.mail.Transport.send0(Transport.java:151)
at javax.mail.Transport.send(Transport.java:80)
at com.transys.app.email.ZMail.sendHtmlMail(ZMail.java:1168)
at com.transys.app.email.EmailMarketing.epSendMail(EmailMarketing.java:318)
at com.transys.app.email.EmailMarketing.epEmailMarketing(EmailMarketing.java:227)
at com.transys.app.email.EmailMarketing.main(EmailMarketing.java:66)
javax.mail.SendFailedException: Invalid Addresses;
nested exception is:
class com.sun.mail.smtp.SMTPAddressFailedException: 504 input error.
;
nested exception is:
class com.sun.mail.smtp.SMTPAddressFailedException: 504 input error.

at com.sun.mail.smtp.SMTPTransport.rcptTo(SMTPTransport.java:1141)
at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:536)
at javax.mail.Transport.send0(Transport.java:151)
at javax.mail.Transport.send(Transport.java:80)
at com.transys.app.email.ZMail.sendHtmlMail(ZMail.java:1168)
at com.transys.app.email.EmailMarketing.epSendMail(EmailMarketing.java:318)
at com.transys.app.email.EmailMarketing.epEmailMarketing(EmailMarketing.java:227)
at com.transys.app.email.EmailMarketing.main(EmailMarketing.java:66)

请高手指点,为什么系统提示目的地址会有错误?
kalso4212h2o 2010-01-26
  • 打赏
  • 举报
回复
或者是把你的host那里的mail.huahonghitech.com
改成huahonghitech.com ......
kalso4212h2o 2010-01-26
  • 打赏
  • 举报
回复
把from 上的地址改为sunz@mail.huahonghitech.com
......而不是sunz@huahonghitech.com
因为你的smtp服务器写的地址是mail.huahonghitech.com
gcxyshiyu 2010-01-26
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 kalso4212h2o 的回复:]
应该说的不是这个吧,他说outlook可以正常收发哦,如果按照你说的,那当然是不能发啦,那163的服务器发QQ的邮件,而且别人也说了,用163服务器测试的时候可以收发....
整理下问题:
第一:是否用163服务器+你那个代码可以正常收发
第二:你换回你自己服务器的时候,from地址有改回过来吗?就是说,你的邮件服务器域名要是xx.com那么你form也应该写成 YY@xx.com这样哦·
第三:你的邮件服务器用outlook测试也是能正常收发?
[/Quote]


你的理解很正确,我换回自己服务器时,把所有需要改的地方都改过来了,我也在域名管理的地方添加Mx记录了,可还是不能给163或者qq发邮件,下面的是发邮件时debug信息:
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]
DEBUG SMTP: useEhlo true, useAuth true

DEBUG: SMTPTransport trying to connect to host "mail.huahonghitech.com", port 25

DEBUG SMTP RCVD: 220 huahonghitech.com Microsoft ESMTP MAIL Service, Version: 6.0.3790.3959 ready at Tue, 26 Jan 2010 13:22:32 +0800

DEBUG: SMTPTransport connected to host "mail.huahonghitech.com", port: 25

DEBUG SMTP SENT: EHLO sy
DEBUG SMTP RCVD: 250-huahonghitech.com Hello [119.118.238.199]
250-AUTH GSSAPI NTLM
250-TURN
250-SIZE 2097152
250-ETRN
250-PIPELINING
250-DSN
250-ENHANCEDSTATUSCODES
250-8bitmime
250-BINARYMIME
250-CHUNKING
250-VRFY
250 OK

DEBUG SMTP Found extension "AUTH", arg "GSSAPI NTLM"
DEBUG SMTP Found extension "TURN", arg ""
DEBUG SMTP Found extension "SIZE", arg "2097152"
DEBUG SMTP Found extension "ETRN", arg ""
DEBUG SMTP Found extension "PIPELINING", arg ""
DEBUG SMTP Found extension "DSN", arg ""
DEBUG SMTP Found extension "ENHANCEDSTATUSCODES", arg ""
DEBUG SMTP Found extension "8bitmime", arg ""
DEBUG SMTP Found extension "BINARYMIME", arg ""
DEBUG SMTP Found extension "CHUNKING", arg ""
DEBUG SMTP Found extension "VRFY", arg ""
DEBUG SMTP Found extension "OK", arg ""
DEBUG SMTP: Attempt to authenticate
DEBUG SMTP: use8bit false
DEBUG SMTP SENT: MAIL FROM: <sunz@huahonghitech.com>
DEBUG SMTP RCVD: 250 2.1.0 sunz@huahonghitech.com....Sender OK

DEBUG SMTP SENT: RCPT TO: <gcxyshiyu@qq.com>
DEBUG SMTP RCVD: 550 5.7.1 Unable to relay for gcxyshiyu@qq.com

Invalid Addresses
gcxyshiyu@qq.com
DEBUG SMTPTransport: Sending failed because of invalid destination addresses
DEBUG SMTP SENT: RSET
DEBUG SMTP RCVD: 250 2.0.0 Resetting
kalso4212h2o 2010-01-26
  • 打赏
  • 举报
回复
同学,其实15楼已经说的很清楚了,你用的服务器是mail.huahonghitech.com,但是你要的邮件地址却是sunz@huahonghitech.com
你见过在www.qq.com里面申请的免费邮件是不用xx@qq.com这样的形式的吗?
同样道理,你既然用mail.huahonghitech.com作为你的邮件服务器地址,那么你的邮件地址也应该是xx@mail.huahonghitech.com这样的形式;也就是说你把from改成sunz@mail.huahonghitech.com这样来试试
gcxyshiyu 2010-01-26
  • 打赏
  • 举报
回复
我现在把debug信息贴出来,大伙看看:
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]
DEBUG SMTP: useEhlo true, useAuth true

DEBUG: SMTPTransport trying to connect to host "mail.huahonghitech.com", port 25

DEBUG SMTP RCVD: 220 huahonghitech.com Microsoft ESMTP MAIL Service, Version: 6.0.3790.3959 ready at Tue, 26 Jan 2010 13:22:32 +0800

DEBUG: SMTPTransport connected to host "mail.huahonghitech.com", port: 25

DEBUG SMTP SENT: EHLO sy
DEBUG SMTP RCVD: 250-huahonghitech.com Hello [119.118.238.199]
250-AUTH GSSAPI NTLM
250-TURN
250-SIZE 2097152
250-ETRN
250-PIPELINING
250-DSN
250-ENHANCEDSTATUSCODES
250-8bitmime
250-BINARYMIME
250-CHUNKING
250-VRFY
250 OK

DEBUG SMTP Found extension "AUTH", arg "GSSAPI NTLM"
DEBUG SMTP Found extension "TURN", arg ""
DEBUG SMTP Found extension "SIZE", arg "2097152"
DEBUG SMTP Found extension "ETRN", arg ""
DEBUG SMTP Found extension "PIPELINING", arg ""
DEBUG SMTP Found extension "DSN", arg ""
DEBUG SMTP Found extension "ENHANCEDSTATUSCODES", arg ""
DEBUG SMTP Found extension "8bitmime", arg ""
DEBUG SMTP Found extension "BINARYMIME", arg ""
DEBUG SMTP Found extension "CHUNKING", arg ""
DEBUG SMTP Found extension "VRFY", arg ""
DEBUG SMTP Found extension "OK", arg ""
DEBUG SMTP: Attempt to authenticate
DEBUG SMTP: use8bit false
DEBUG SMTP SENT: MAIL FROM:<sunz@huahonghitech.com>
DEBUG SMTP RCVD: 250 2.1.0 sunz@huahonghitech.com....Sender OK

DEBUG SMTP SENT: RCPT TO:<gcxyshiyu@qq.com>
DEBUG SMTP RCVD: 550 5.7.1 Unable to relay for gcxyshiyu@qq.com

Invalid Addresses
gcxyshiyu@qq.com
DEBUG SMTPTransport: Sending failed because of invalid destination addresses
DEBUG SMTP SENT: RSET
DEBUG SMTP RCVD: 250 2.0.0 Resetting
gcxyshiyu 2010-01-25
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 archko 的回复:]
什么叫内网?你内部的邮件服务器?163不能发的。验证不能通过的。
[/Quote]


内网就是我的server2003邮件服务器上的用户,外网就是如163或者qq上的用户
ChDw 2010-01-25
  • 打赏
  • 举报
回复
pro.put("mail.host","smtp.163.com");

你使用了smtp.163.com,那么你的from地址必须是@163.com结尾的。否则163会拒绝的。
kalso4212h2o 2010-01-25
  • 打赏
  • 举报
回复
不好意思,没看到你用的163服务器,那么就是你163服务器没有设置SMTP服务,所以不允许你发送,你先登录163,然后点设置,把SMTP服务给启动了,就应该可以了
kalso4212h2o 2010-01-25
  • 打赏
  • 举报
回复
Invalid Addresses; nested exception is: class javax.mail.SendFailedException: 550 5.7.1 Unable to relay for gcxyshiyu@qq.com
由于被反域名解析验证 验证出你所发的邮件域名解析错误,也就是没你那个域名登记,去用花生壳弄个域名再试试,或者找个安全系数低点的邮箱去发
archko 2010-01-25
  • 打赏
  • 举报
回复
什么叫内网?你内部的邮件服务器?163不能发的。验证不能通过的。
kalso4212h2o 2010-01-25
  • 打赏
  • 举报
回复
楼上是对的,是我没认真看题目....郁闷死了.....
ChDw 2010-01-25
  • 打赏
  • 举报
回复
lz的错误异常一直说是Unable to relay for gcxyshiyu@qq.com 吧,那么应该就是from地址不正确造成的
kalso4212h2o 2010-01-25
  • 打赏
  • 举报
回复
应该说的不是这个吧,他说outlook可以正常收发哦,如果按照你说的,那当然是不能发啦,那163的服务器发QQ的邮件,而且别人也说了,用163服务器测试的时候可以收发....
整理下问题:
第一:是否用163服务器+你那个代码可以正常收发
第二:你换回你自己服务器的时候,from地址有改回过来吗?就是说,你的邮件服务器域名要是xx.com那么你form也应该写成 YY@xx.com这样哦·
第三:你的邮件服务器用outlook测试也是能正常收发?
ChDw 2010-01-25
  • 打赏
  • 举报
回复
不是这个问题。因为你的from邮件地址应该是设置为gcxyshiyu@qq.com

smtp.163.com是不允许接收这样的信件,它要求from地址必须是@163.com
否则它不是白白帮你转发邮件!大部分的SMTP服务器都是禁止这样的邮件的

所以如果你的from地址是@qq.com,则你应该由smtp.qq.com发送,又或者你修改from为xxx@163.com



更深入一点,作为一套邮件服务器实际是分开两部分的
一台是SMTP功能,允许接收from地址是属于自己域名的邮件,并按该邮件的目的地址列表发送到其它MX邮件服务器

一台是MX(实际上协议也是SMTP,不过地址不是smtp.163.com,而是nslookup中type=MX的163.com的地址),这台服务器只允许接收目的地址中包含自己域名的邮件


上面MX一般我们不会直接使用到,所以你可以不理会。
kalso4212h2o 2010-01-25
  • 打赏
  • 举报
回复
额.....之前睡着了- -现在才看清楚你说的,你这个问题有点复杂,就是说用outlook收发163的没问题,用你自己那个程序来收发163的就出问题这样吧.....这个之前还真没遇到过.....想想,想想,可能是身份验证问题,但我记得以前我身份验证的时候报的错是什么SSL什么什么的.....
kalso4212h2o 2010-01-25
  • 打赏
  • 举报
回复
我就说说我用james做服务器想与外网交互成功的配置吧,看看能不能对你有所帮助;
第一:服务器域名必须能通过反域名解析(就是说这个域名是实实在在存在的,而且你的服务器也是放到这个域名指向的IP的计算机上,关于这个再次建议可以在网关把25,110端口指向你的机子,然后你的机子下个花生壳,再用花生壳申请个免费域名,运行就OK了)
第二:james的配置里面有个DNS server配置的,就是配置 服务器域名 和 外网IP地址(不知道你那个有没有啦)
其实我还是觉得是你服务器域名的问题......请问下,你的服务器域名是什么?就是
pro.put("mail.host","smtp.163.com"); 这句,你把“smtp.163.com"换成了哪个?
kalso4212h2o 2010-01-25
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 gcxyshiyu 的回复:]
引用 5 楼 kalso4212h2o 的回复:
不好意思,上面的我是用163做测试,163都好用,而我们的server2003邮件服务器给163或者qq发邮件就会出现上面的问题,用javamail收邮件没有问题,是不是邮件服务器配置有问题呀!
[/Quote]
请问下,那你用server2003邮件服务器配置的邮件名是什么?这样的话,或者是反域名解析没通过了,前段时间我也是因为这个反域名解析问题搞了一个星期,如果你使用的域名是网上没注册的(就是你本机虚拟出来)也会出现那样的现象,建议可以试试拿花生壳申请个免费域名试试。没用过server2003来配置邮件服务器,我之前用的james配置的,就是域名出了问题。
gcxyshiyu 2010-01-25
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 kalso4212h2o 的回复:]
不好意思,没看到你用的163服务器,那么就是你163服务器没有设置SMTP服务,所以不允许你发送,你先登录163,然后点设置,把SMTP服务给启动了,就应该可以了
[/Quote]


不好意思,上面的我是用163做测试,163都好用,而我们的server2003邮件服务器给163或者qq发邮件就会出现上面的问题,用javamail收邮件没有问题,是不是邮件服务器配置有问题呀!
gcxyshiyu 2010-01-25
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 kalso4212h2o 的回复:]
不好意思,没看到你用的163服务器,那么就是你163服务器没有设置SMTP服务,所以不允许你发送,你先登录163,然后点设置,把SMTP服务给启动了,就应该可以了
[/Quote]


不好意思,我重新补充一下,我们的server2003邮件服务器在电信托管,用outlook配置的客户端给server2003邮件服务器上的用户发邮件或者接收邮件都没问题,给163或者qq发和收也没问题,就是利用javamail程序,给163或者qq之类的邮箱发就出现Invalid Addresses; nested exception is: class javax.mail.SendFailedException: 550 5.7.1 Unable to relay for gcxyshiyu@qq.com这种错误,我也把发邮件的用户在163或QQ中设置了白名单,不知道是程序出问题了还是配置邮件服务器出问题?
加载更多回复(2)

67,516

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧