JavaMail的Transport.send(msg)或Transport.connect

unixpro 2008-07-30 04:04:57
JavaMail中的Transport.send(msg)或Transport.connect(),在Windows下完全正常,但在linux下(redhat/CentOs),循环连续发送n次,基本上总会在20几次时停顿不动,用netstat -utlan|grep :25|grep EST查看tcp状态,发现一直是ESTABLISHED状态,不知道是不是JavaMail的bug

方法1:直接调用Transport.send
debug("send mail[" + i + "] start...");
Transport.send(msg);
debug("send mail[" + i + "] end.");

方法2:先connect再sendMessage
Transport transport = session.getTransport("smtp");
debug("send mail[" + i + "] start...");
transport.connect();
debug("send mail[" + i + "] end.");
transport.sendMessage(message, message.getAllRecipients());

大伙可以用JavaMail自带的demo/msgmultisendsample.java作测试。

...全文
1077 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
manufacturer 2011-05-03
  • 打赏
  • 举报
回复
我也遇到了这个问题 还抛了一个这样的错误:
javax.mail.SendFailedException: Invalid Addresses;
nested exception is:
class com.sun.mail.smtp.SMTPAddressFailedException: 452 Too many recipients received this hour

at com.sun.mail.smtp.SMTPTransport.rcptTo(SMTPTransport.java:1141)
at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:536)
at com.greensoft.mail.action.MailMessageAction.sendMail(MailMessageAction.java:1856)
at com.greensoft.mail.EmailSendRecv.run(EmailSendRecv.java:39)
at java.lang.Thread.run(Unknown Source)

chaizx 2010-11-20
  • 打赏
  • 举报
回复
哎,还是么解决啊
matrix1984 2008-08-01
  • 打赏
  • 举报
回复
linux不懂哦,good luck!
unixpro 2008-07-31
  • 打赏
  • 举报
回复
to tr5gfd:
你一共写了112个字,只有前面9个字让人兴奋了一下,百分比不到1/10,做广告的意图太明显了!!!谁会上当
unixpro 2008-07-30
  • 打赏
  • 举报
回复
thanks bootupnow
还是一样,照死不误,
高手在哪?
bootupnow 2008-07-30
  • 打赏
  • 举报
回复
lz可以换换apache的Commons Email来试试。

Commons Email aims to provide a API for sending email. It builds on the JavaMail
API with the aim of presenting a simplified API which is easy for developers who
are not mail experts to use. It is a compact component with a small number of
classes.
bootupnow 2008-07-30
  • 打赏
  • 举报
回复
这个偶就没有经验了,一般不会发那么多次的。帮up
JavaMail.jsp代码: <%@ page import="javax.mail.*"%> <%@ page import="javax.activation.*"%> <%@ page import="javax.mail.internet.*"%> <%@ page import="java.util.*,java.io.*"%> <%@ page contentType="text/html;charset=utf8"%> <%@page import="java.net.URL"%> <%@page import="org.apache.commons.httpclient.methods.GetMethod"%> <%@page import="org.apache.commons.httpclient.HttpClient"%> <%@page import="vdo.ws.GetSource"%> CH17 - <em>JavaMail</em>2.jsp

利用JavaMail来发送电子邮件 - HTML格式

<% InternetAddress[] address = null; //request.setCharacterEncoding("utf8"); String mailserver = "smtp.163.com";//发出邮箱的服务器 String From = request.getParameter("From");//发出的邮箱 String to = request.getParameter("To");//发到的邮箱 String Subject = request.getParameter("Subject");//标题 String type = request.getParameter("Type");//发送邮件格式为html String messageText = request.getParameter("Message");// 发送内容 boolean sessionDebug = false; try { // 设定所要用的Mail 服务器和所使用的传输协议 java.util.Properties props = System.getProperties(); props.put("mail.host", mailserver); props.put("mail.transport.protocol", "smtp"); props.put("mail.smtp.auth", "true");//指定是否需要SMTP验证 // 产生新的Session 服务 javax.mail.Session mailSession = javax.mail.Session.getDefaultInstance(props, null); mailSession.setDebug(sessionDebug); Message msg = new MimeMessage(mailSession); // 设定发邮件的人 msg.setFrom(new InternetAddress(From)); // 设定收信人的信箱 address = InternetAddress.parse(to, false); msg.setRecipients(Message.RecipientType.TO, address); // 设定信中的主题 msg.setSubject(Subject); // 设定送信的时间 msg.setSentDate(new Date()); Multipart mp = new MimeMultipart(); MimeBodyPart mbp = new MimeBodyPart(); // 设定邮件内容的类型为 text/plain 或 text/html mbp.setContent(messageText, type + ";charset=utf8"); mp.addBodyPart(mbp); msg.setContent(mp); Transport transport = mailSession.getTransport("smtp"); ////请填入你的邮箱用户名和密码,千万别用我的^_^ transport.connect(mailserver, "zhang-xinjie", "******");//设发出邮箱的用户名、密码 transport.sendMessage(msg, msg.getAllRecipients()); transport.close(); //Transport.send(msg); out.println("邮件已顺利发送"); } catch (MessagingException mex) { mex.printStackTrace(); out.println(mex); } try{ response.sendRedirect("../indexSelf.jsp");//转向某页 }catch (Exception e){ e.printStackTrace(); } %>
package com.lccert.crm.chemistry.util; import java.util.Date; import java.util.Properties; import javax.mail.Message; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; public class SendMail { private static SendMail instance = null; private SendMail() { } public static SendMail getInstance() { if (instance == null) { instance = new SendMail(); } return instance; } public void send() { try { String to[]={"tiwsonchen@163.com","tiwson@163.com"}; Properties p = new Properties(); //Properties p = System.getProperties(); p.put("mail.smtp.auth", "true"); p.put("mail.transport.protocol", "smtp"); p.put("mail.smtp.host", "smtp.163.com"); p.put("mail.smtp.port", "25"); //建立会话 Session session = Session.getInstance(p); Message msg = new MimeMessage(session); //建立信息 msg.setFrom(new InternetAddress("tiwson@163.com")); //发件人 String toList = getMailList(to); InternetAddress[] iaToList = new InternetAddress().parse(toList); msg.setRecipients(Message.RecipientType.TO,iaToList); //收件人 msg.setSentDate(new Date()); // 发送日期 msg.setSubject("javamail测试邮件"); // 主题 msg.setText("注意,这是测试程序发的,请不要回复!"); //内容 // 邮件服务器进行验证 Transport tran = session.getTransport("smtp"); tran.connect("smtp.163.com", "tiwson", "9041160"); // bluebit_cn是用户名,xiaohao是密码 tran.sendMessage(msg, msg.getAllRecipients()); // 发送 System.out.println("邮件发送成功"); } catch (Exception e) { e.printStackTrace(); } } private String getMailList(String[] mailArray){ StringBuffer toList = new StringBuffer(); int length = mailArray.length; if(mailArray!=null && length <2){ toList.append(mailArray[0]); }else{ for(int i=0;i

67,515

社区成员

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

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