项目需要邮箱发送功能,但是邮箱发送功能时而成功,时而发送不了。
求大虾解谜..........
下面是发送邮件代码:
int num = from.indexOf("@");
String strstart = from.substring(0,num);
String strend = from.substring(num+1, from.length());
String smtp = "smtp."+strend; // 设置发送邮件所用到的smtp
String servername = strstart;
String serverpaswd = ConfigureFileHelper.getProperty("pcode");
javax.mail.Session mailSession; // 邮件会话对象
javax.mail.internet.MimeMessage mimeMsg; // MIME邮件对象
Properties props = java.lang.System.getProperties(); // 获得系统属性对象
props.put("mail.smtp.host", smtp); // 设置SMTP主机
props.put("mail.smtp.auth", "true"); // 是否到服务器用户名和密码验证
// 到服务器验证发送的用户名和密码是否正确
Email_Autherticatorbean myEmailAuther = new Email_Autherticatorbean(servername, serverpaswd);
// 设置邮件会话
mailSession = javax.mail.Session.getInstance(props, (Authenticator) myEmailAuther);
// 设置传输协议
javax.mail.Transport transport = mailSession.getTransport("smtp");
// 设置from、to等信息
mimeMsg = new javax.mail.internet.MimeMessage(mailSession);
if (from.length() > 0)
{
InternetAddress sentFrom = new InternetAddress(from);
mimeMsg.setFrom(sentFrom); // 设置发送人地址
}
InternetAddress[] sendTo = new InternetAddress[to.length];
for (int i = 0; i < to.length; i++)
{
System.out.println("发送到:" + to[i]);
sendTo[i] = new InternetAddress(to[i]);
}
mimeMsg.setRecipients(javax.mail.internet.MimeMessage.RecipientType.TO, sendTo);
mimeMsg.setSubject(subject, "utf-8");
MimeBodyPart messageBodyPart1 = new MimeBodyPart();
// messageBodyPart.setText(UnicodeToChinese(text));
messageBodyPart1.setContent(text, mimeType);
// 附件传输及格式
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(messageBodyPart1);
for (int i = 0; i < filenames.length; i++)
{
MimeBodyPart messageBodyPart2 = new MimeBodyPart();
// 选择出每一个附件名
String filename = filenames[i].split(",")[0];
String displayname = filenames[i].split(",")[0];
// 得到数据源
FileDataSource fds = new FileDataSource(filename);
// 得到附件本身并至入BodyPart
messageBodyPart2.setDataHandler(new DataHandler(fds));
// 得到文件名同样至入BodyPart
messageBodyPart2.setFileName(displayname);
messageBodyPart2.setFileName(fds.getName());
messageBodyPart2.setFileName(MimeUtility.encodeText(displayname));
multipart.addBodyPart(messageBodyPart2);
}
mimeMsg.setContent(multipart);
// 设置信件头的发送日期
mimeMsg.setSentDate(new Date());
mimeMsg.saveChanges();
// 发送邮件
transport.send(mimeMsg);
transport.close();邮箱emailsmtp邮件javamail

解决方案 »

  1.   

    在补充一下:
        我公司测试环境下、还是我本地都可以发送成功。但是在用户的服务器部署邮箱时而成功,时而发送不出去,也没有发送的记录,我看了日志是在transport.send(mimeMsg);出错了
    javax.mail.MessagingException: Unknown SMTP host: smtp.qq.com;
      nested exception is:
    java.net.UnknownHostException: smtp.qq.com
    at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1543)
    at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:453)
    at javax.mail.Service.connect(Service.java:313)
    at javax.mail.Service.connect(Service.java:172)
    at javax.mail.Service.connect(Service.java:121)
    at javax.mail.Transport.send0(Transport.java:190)
    at javax.mail.Transport.send(Transport.java:120)
    at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
    at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
    at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
    at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:875)
    at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
    at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
    at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
    at java.lang.Thread.run(Thread.java:662)
    Caused by: java.net.UnknownHostException: smtp.qq.com
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:195)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
    at java.net.Socket.connect(Socket.java:529)
    at java.net.Socket.connect(Socket.java:478)
    at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:267)
    at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:227)
    at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1511)
    ... 31 more
      

  2.   

    Caused by: java.net.UnknownHostException: smtp.qq.com:
    应该是邮件服务器连接不上造成的。
      

  3.   

    方法上加个参数 AtomicInteger counter,
    发送代码try catch下,有异常重新执行下代码,设置下重试次数。
      

  4.   

    java.net.UnknownHostException: smtp.qq.com这个你先看看客户的服务器可不可以访问smtp.qq.com
    当出现问题的时候让用户在服务器上执行 ping stmp.qq.com  确定网络是畅通的。
      

  5.   


    ping stmp.qq.com 此方法不可以用,我在测试环境ping 不通,但是任然可以成功发送邮箱。
      

  6.   


    private static void initProxy() {
    System.getProperties().setProperty("proxySet", "true");
    System.getProperties().setProperty("http.proxyHost",
    "www-proxy.xxx.se");
    System.getProperties().setProperty("http.proxyPort", "8080");
    }