代码如下:
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 [email protected] 这种错误,我不知道是程序出问题了,还是邮件服务器的配置有问题,希望大家能够帮忙解决一下,非常感谢!
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 [email protected] 这种错误,我不知道是程序出问题了,还是邮件服务器的配置有问题,希望大家能够帮忙解决一下,非常感谢!
解决方案 »
- java 怎麼保存jsp頁面的多組多個的 复選框和單選按鈕的值 並保存後顯示
- 求订单 订单项的 hibernate 1对多 映射
- JAVA操作PDF的几个问题,高手请进。
- 如何使用htmlparser提取网页中指定的table中的链接
- 写出满足要求的SQL语句
- 求java高手解答,关于springmvc的
- 关于FlippingBook逼真flash翻页效果问题,如何自动翻页,急求!!!!!
- Struts初始化的问题!
- Spring 1.1 Final Released
- 非常急 ,求各位大神帮我出出主意
- hibernate中的getCurrentSession()有什么具体用处?
- hibernate3.2 one-to-one求助
http://forums.sun.com/thread.jspa?threadID=5321251
由于被反域名解析验证 验证出你所发的邮件域名解析错误,也就是没你那个域名登记,去用花生壳弄个域名再试试,或者找个安全系数低点的邮箱去发
第一:服务器域名必须能通过反域名解析(就是说这个域名是实实在在存在的,而且你的服务器也是放到这个域名指向的IP的计算机上,关于这个再次建议可以在网关把25,110端口指向你的机子,然后你的机子下个花生壳,再用花生壳申请个免费域名,运行就OK了)
第二:james的配置里面有个DNS server配置的,就是配置 服务器域名 和 外网IP地址(不知道你那个有没有啦)
其实我还是觉得是你服务器域名的问题......请问下,你的服务器域名是什么?就是
pro.put("mail.host","smtp.163.com"); 这句,你把“smtp.163.com"换成了哪个?
否则它不是白白帮你转发邮件!大部分的SMTP服务器都是禁止这样的邮件的所以如果你的from地址是@qq.com,则你应该由smtp.qq.com发送,又或者你修改from为[email protected]更深入一点,作为一套邮件服务器实际是分开两部分的
一台是SMTP功能,允许接收from地址是属于自己域名的邮件,并按该邮件的目的地址列表发送到其它MX邮件服务器一台是MX(实际上协议也是SMTP,不过地址不是smtp.163.com,而是nslookup中type=MX的163.com的地址),这台服务器只允许接收目的地址中包含自己域名的邮件
上面MX一般我们不会直接使用到,所以你可以不理会。
整理下问题:
第一:是否用163服务器+你那个代码可以正常收发
第二:你换回你自己服务器的时候,from地址有改回过来吗?就是说,你的邮件服务器域名要是xx.com那么你form也应该写成 [email protected]这样哦·
第三:你的邮件服务器用outlook测试也是能正常收发?
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]
DEBUG SMTP: useEhlo true, useAuth trueDEBUG: SMTPTransport trying to connect to host "mail.huahonghitech.com", port 25DEBUG 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: 25DEBUG 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 OKDEBUG 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:<[email protected]>
DEBUG SMTP RCVD: 250 2.1.0 [email protected] OKDEBUG SMTP SENT: RCPT TO:<[email protected]>
DEBUG SMTP RCVD: 550 5.7.1 Unable to relay for [email protected] Addresses
[email protected]
DEBUG SMTPTransport: Sending failed because of invalid destination addresses
DEBUG SMTP SENT: RSET
DEBUG SMTP RCVD: 250 2.0.0 Resetting
你见过在www.qq.com里面申请的免费邮件是不用[email protected]这样的形式的吗?
同样道理,你既然用mail.huahonghitech.com作为你的邮件服务器地址,那么你的邮件地址也应该是[email protected]这样的形式;也就是说你把from改成[email protected]这样来试试
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: <[email protected]>
DEBUG SMTP RCVD: 250 2.1.0 [email protected] OK DEBUG SMTP SENT: RCPT TO: <[email protected]>
DEBUG SMTP RCVD: 550 5.7.1 Unable to relay for [email protected] Invalid Addresses
[email protected]
DEBUG SMTPTransport: Sending failed because of invalid destination addresses
DEBUG SMTP SENT: RSET
DEBUG SMTP RCVD: 250 2.0.0 Resetting
......而不是[email protected]
因为你的smtp服务器写的地址是mail.huahonghitech.com
改成huahonghitech.com ......
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");
我用的是花生壳+winmailDEBUG: 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: 25EHLO 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:<[email protected]>
250 OK
RCPT TO:<[email protected]>
250 OK, recipient accepted
RCPT TO:<>
504 input error.
RCPT TO:<>
504 input error.
DEBUG SMTP: Valid Unsent Addresses
DEBUG SMTP: marshall <[email protected]>
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) 请高手指点,为什么系统提示目的地址会有错误?