java mail 发邮件 1000 封以上 怎么让邮件快速发送

Python019

java mail 发邮件 1000 封以上 怎么让邮件快速发送,第1张

...

String to="[email protected],[email protected],[email protected]"

InternetAddress[] toList = new InternetAddress().parse(to)

msg.setRecipients(Message.RecipientType.TO, toList)

...

Transport.send(msg)

或者直连邮件网关,并由邮件网关直接转发至收件箱所在的服务器,因此发送速度是基本不受限的。如果没有邮件网关,同时又不想自己完成相关功能,那么建议不要只让一台邮件服务器转发你的邮件,而是多连几台,将自己的邮件平均分配到每台邮件服务器上,这样就不会由于发送过多,而被拒了。

至于处理能力,可以提几点关于提高发送能力的建议

1.SMTP协议是支持长连接的协议,同时mail.jar实现了SMTP协议的连接、邮件发送及连接断开,至于对连接的维护没有涉及;同时Spring中的邮件支持是通过封装mail.jar实现的,但只提供了单笔发送和批量发送(均为短连接)。

2.如果使用长连接,建议再引入连接池,那样既便于维护连接,又可以提高连接的使用率。

晕,貌似这个问题以前有人提过,我也回答过了,不满意吗?需要用到javamail的jar包,网上有。找不到把邮箱贴出来,我发给你。package test.servletimport java.io.IOException

import java.io.PrintWriter

import java.util.Date

import java.util.Propertiesimport javax.mail.Message

import javax.mail.MessagingException

import javax.mail.Session

import javax.mail.Transport

import javax.mail.internet.AddressException

import javax.mail.internet.InternetAddress

import javax.mail.internet.MimeMessage

import javax.servlet.ServletConfig

import javax.servlet.ServletException

import javax.servlet.http.HttpServlet

import javax.servlet.http.HttpServletRequest

import javax.servlet.http.HttpServletResponsepublic class SendMailServlet extends HttpServlet {

/**

*

*/

private static final long serialVersionUID = 2960000940515881314L

private ServletConfig config = null

private static final String CONTENT_TYPE = "text/html"public void init(ServletConfig config1) throws ServletException {

this.config = config1

}final public ServletConfig getServletConfig() {

return config

}/**

* Constructor of the object.

*/

public SendMailServlet() {

super()

}/**

* Destruction of the servlet.

*/

public void destroy() {

super.destroy()

}/**

* The doGet method of the servlet.

*

* This method is called when a form has its tag value method equals to get.

*

* @param request the request send by the client to the server

* @param response the response send by the server to the client

* @throws ServletException if an error occurred

* @throws IOException if an error occurred

*/

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

doPost(request,response)

}/**

* The doPost method of the servlet.

*

* This method is called when a form has its tag value method equals to post.

*

* @param request the request send by the client to the server

* @param response the response send by the server to the client

* @throws ServletException if an error occurred

* @throws IOException if an error occurred

*/

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

String to_mail=codeToString(request.getParameter("to"))

String to_title=codeToString(request.getParameter("title"))

String to_content=codeToString(request.getParameter("content"))

Properties props=new Properties()//也可用Properties props = System.getProperties()//

props.put("mail.smtp.host","localhost")//存储发送邮件服务器的信息

props.put("mail.smtp.auth","true")//同时通过验证

Session s=Session.getInstance(props)//根据属性新建一个邮件会话

s.setDebug(true)//由邮件会话新建一个消息对象

MimeMessage message=new MimeMessage(s)//由邮件会话新建一个消息对象//设置邮件

InternetAddress from

try {

from = new InternetAddress("[email protected]")

message.setFrom(from)//设置发件人

InternetAddress to=new InternetAddress(to_mail)

message.setRecipient(Message.RecipientType.TO,to)//设置收件人,并设置其接收类型为TO

message.setSubject(to_title)//设置主题

message.setText(to_content)//设置信件内容

message.setSentDate(new Date())//设置发信时间

//发送邮件

message.saveChanges()//存储邮件信息

Transport transport=s.getTransport("smtp")

//以smtp方式登录邮箱,第一个参数是发送邮件用的邮件服务器SMTP地址,第二个参数为用户名,第三个参数为密码

transport.connect("localhost",8479,"","")

transport.sendMessage(message,message.getAllRecipients())//发送邮件,其中第二个参数是所有已设好的收件人地址

transport.close()

response.setContentType(CONTENT_TYPE)

PrintWriter out = response.getWriter()

out.print("success")

} catch (AddressException e) {

e.printStackTrace()

} catch (MessagingException e) {

e.printStackTrace()

}}

public String codeToString(String str) {//处理中文字符串的函数

String s=str

try {

byte tempB[]=s.getBytes("ISO-8859-1")

s=new String(tempB)

return s

} catch(Exception e) {

return s

}

}

}

public void sendMail(String subject, String from, List<String>to, List<String>cc,

List<String>bcc, String bodyText, List<File>files, boolean draft) {

Message message = new MimeMessage(session)

try {

// 设置发件人地址

message.setFrom(new InternetAddress(from))

// 设置主题

message.setSubject(subject)

// 设置收件人

if(to!=null){

for (String item : to) {

message.addRecipient(Message.RecipientType.TO,

new InternetAddress(item))

}

}

// 设置抄送人

if(cc!=null){

for (String item : cc) {

message.addRecipient(Message.RecipientType.CC,

new InternetAddress(item))

}

}

// 设置密送人

if(bcc!=null){

for (String item : bcc) {

message.addRecipient(Message.RecipientType.BCC,

new InternetAddress(item))

}

}

if(draft){

message.setFlag(Flags.Flag.DRAFT, true)

}

// 设置邮件内容

Multipart multipart = new MimeMultipart()

MimeBodyPart txtPart = new MimeBodyPart()

txtPart.setContent(bodyText, "text/htmlcharset=utf-8")

multipart.addBodyPart(txtPart)

// 添加附件

if (files != null &&files.size() >0) {

for (File f : files) {

MimeBodyPart part = new MimeBodyPart()

FileDataSource fds = new FileDataSource(f)// 得到数据源

part.setDataHandler(new DataHandler(fds))// 得到附件本身并至入BodyPart

String filename=encodeFileName(fds.getName())

part.setFileName(filename)// 得到文件名同样至入BodyPart

multipart.addBodyPart(part)

}

}

message.setContent(multipart)

message.setFlag(Flags.Flag.RECENT, true)

message.saveChanges()

if(!draft){

Transport transport = session.getTransport("smtp")

transport.connect(host, userName, passWord)

transport.sendMessage(message, message.getAllRecipients())

transport.close()

}

} catch (AddressException e) {

e.printStackTrace()

} catch (MessagingException e) {

e.printStackTrace()

}

}