javamail 多线程发送邮件出现邮件错乱的问题

问题描述

javamail 多线程发送邮件出现邮件错乱的问题

大家好,使用javamail 进行多线程发送邮件,发生了本来是发送给B的内容,却发送给了A,而且概率不小,代码大概如下,请大家帮忙分析一下,以下这个方法就是多线程调用的,邮件的一些信息是使用MailSend bean封装进来,在调用这个方法之前,有日志记录,都显示是正确的,但是就发生了错乱,高手们帮看看,再不解决就丢饭碗了,先谢谢了!
/**

  • @Description: 以HTML格式发送邮件
  • @param MailSend mailSend 待发送的邮件对象信息
  • @return boolean true:发送成功 false:发送失败
    */
    public boolean sendHtmlMail(MailSend mailSend) {
    long stime = System.currentTimeMillis();
    logger.debug("MailSendServer.sendHtmlMail(mailSend) entry: mailSend={}",new Object[] { mailSend.toString() });
    Session sendMailSession = null;
    Transport transport = null;
    try {
    // 判断是否需要身份认证, 根据邮件会话属性和密码验证器构造一个发送邮件的session
    Properties properties = mailSend.getProperties();
    if (mailSend.isValidate()) {
    // 如果需要身份认证,则创建一个密码验证器
    EmailAuthenticator authenticator = new EmailAuthenticator(
    mailSend.getUserName(), mailSend.getPassword());
    sendMailSession = Session.getInstance(properties, authenticator);
    } else {
    sendMailSession = Session.getInstance(properties);
    }
    // 是否开启 Mail Session Debug
    if(mail_session_debug == 1) {
    sendMailSession.setDebug(true);
    }
    // 根据session创建一个邮件消息
    Message mailMessage = new MimeMessage(sendMailSession);
    // 创建邮件发送者地址
    Address from = new InternetAddress(mailSend.getFromAddress());
    // 设置邮件消息的发送者
    mailMessage.setFrom(from);
    // 创建邮件的接收者地址,并设置到邮件消息中
    Address to = new InternetAddress(mailSend.getToAddress());
    // Message.RecipientType.TO属性表示接收者的类型为TO
    mailMessage.setRecipient(Message.RecipientType.TO, to);
    // 设置邮件消息的主题
    mailMessage.setSubject(mailSend.getSubject());
    // 设置邮件消息发送的时间
    mailMessage.setSentDate(new Date());
    // MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象
    Multipart mainPart = new MimeMultipart();
    // 创建一个包含HTML内容的MimeBodyPart
    BodyPart html = new MimeBodyPart();
    // 设置HTML内容
    html.setContent(mailSend.getContent(), contentType);
    mainPart.addBodyPart(html);
    // 将MiniMultipart对象设置为邮件内容
    mailMessage.setContent(mainPart);
    // 发送邮件
    // Transport.send(mailMessage);
    // email send
    mailMessage.saveChanges();
    transport = sendMailSession.getTransport("smtp");
    transport.connect(mailSend.getMailServerHost(),
    Integer.parseInt(mailSend.getMailServerPort()),
    mailSend.getUserName(), mailSend.getPassword());
    logger.warn(
    "mail transport: toAddress={}, title={}",
    new Object[] {mailSend.getToAddress(),mailSend.getSubject()});
    transport.sendMessage(mailMessage, mailMessage.getAllRecipients());
    logger.debug("MailSendServer.sendHtmlMail(mailSend) success: costTime={}ms",
    new Object[] { System.currentTimeMillis() - stime });
    return true;
    } catch (MessagingException e) {
    logger.error("MailSendServer.sendHtmlMail(mailSend) fail: errorMessage={}",
    new Object[] { e.getMessage() });
    return false;
    } catch (Exception e) {
    logger.error("MailSendServer.sendHtmlMail(mailSend) fail: errorMessage={}",
    new Object[] { e.getMessage() });
    throw new ServiceException(e);
    // return false;
    } finally {
    if(null != transport) {
    try {
    transport.close();
    } catch (MessagingException e) {
    logger.error("MailSendServer.sendHtmlMail(mailSend) fail when close transport : errorMessage={}",
    new Object[] { e.getMessage() });
    }
    }
    }
    }
时间: 2024-10-21 15:07:04

javamail 多线程发送邮件出现邮件错乱的问题的相关文章

多线程发送邮件问题,日志没有报错,但是发送邮件未执行

问题描述 多线程发送邮件问题,日志没有报错,但是发送邮件未执行 代码直行到 // 发送器 JavaMailSenderImpl sender = new JavaMailSenderImpl(); 这个地方的时候就停止了,也没有报任何错.不太清楚是哪里的问题,请高手帮忙看看 package com.hhsoft.sectionTimerTask.util; import java.io.File; import java.io.IOException; import java.io.InputS

web项目中页面修改javamail发件人信息后发邮件失败

问题描述 web项目中页面修改javamail发件人信息后发邮件失败 我们的web项目使用javamail发送邮件.页面可修改发送邮件的服务器.发件人信息,但是现在在页面修改发件人邮箱地址和密码之后,发送邮件失败.重起Tomcat服务器之后,又可以正常发送邮件,各位大神,有谁知道为什么呢? public boolean sendMail(String subject String body){ Properties props = new Properties(); props.put("&qu

c#调用outlook[align=left]发送邮件到邮件服务[/align]器上,并且要附带文件。怎么做啊?

问题描述 c#调用outlook 发送邮件到邮件服务器上,并且要附带文件.怎么做啊?求大神指导.求源码. 解决方案

JavaMail关于发送邮件和接收邮件问题.

问题描述 1.怎么才能知道对方是否收到邮件?2.邮箱里面有邮件,为什么message.length打印出来是0?Folderfolder=store.getFolder("INBOX");//如果是收件箱if(folder==null)thrownewException("NoPOP3INBOX");folder.open(Folder.READ_WRITE);Messagemessage[]=folder.getMessages();System.out.prin

转 JavaMail发送和接收邮件API(详解)

一.JavaMail概述:     JavaMail是由Sun定义的一套收发电子邮件的API,不同的厂商可以提供自己的实现类.但它并没有包含在JDK中,而是作为JavaEE的一部分.     厂商所提供的JavaMail服务程序可以有选择地实现某些邮件协议,常见的邮件协议包括: SMTP:简单邮件传输协议,用于发送电子邮件的传输协议: POP3:用于接收电子邮件的标准协议: IMAP:互联网消息协议,是POP3的替代协议.     这三种协议都有对应SSL加密传输的协议,分别是SMTPS,POP

JavaWeb中使用JavaMail实现发送邮件功能实例详解_java

现在很多的网站都提供有用户注册功能, 通常我们注册成功之后就会收到一封来自注册网站的邮件.邮件里面的内容可能包含了我们的注册的用户名和密码以及一个激活账户的超链接等信息.今天我们也来实现一个这样的功能,用户注册成功之后,就将用户的注册信息以Email的形式发送到用户的注册邮箱当中,实现发送邮件功能就得借助于JavaMail了. 一.搭建开发环境 1.1.创建Web项目 1.2.用户注册的Jsp页面 register.jsp <%@ page language="java" pag

问题标签用户 web项目中页面修改javamail发件人信息后发邮件失败

问题描述 各位大神,请教个问题!我们的web项目使用javamail发送邮件.页面可修改发送邮件的服务器.发件人信息,但是现在在页面修改发件人邮箱地址和密码之后,发送邮件失败.重起Tomcat服务器之后,同样的用户名密码又可以正常发送邮件.大神,有谁知道为什么呢?发邮件的代码如下:ublicbooleansendMail(Stringsubject,Stringbody){Propertiesprops=newProperties();props.put("mail.smtp.host"

c#发送邮件 垃圾邮件

问题描述 c#程序发送邮件别视为垃圾邮件怎么办QQ邮件 解决方案 解决方案二:在qq邮箱应该可以设置的解决方案三:邮箱设置里面,反垃圾->添加白名单.把你的发件地址加到白名单上解决方案四:邮件是不是垃圾邮件不是本身的内容确定的,而是接收邮件的服务器根据他们的经验制定检测方法来判定的,是一种人为的判定,所以楼主只能通过发送各种内容的邮件来测试他们的检测方法.解决方案五:不至于吧,这个与你的邮箱号码有关系吧,我写的邮箱提示,没有出现过楼主的问题解决方案六:可能是内容被判定为广告或垃圾邮件,你测试一下

邮箱发送邮件-发邮件失败该如何解决

问题描述 发邮件失败该如何解决 我用代码实现了发送邮件的功能用的是qq邮箱可是运行后总是提示failed to connect百度后说是什么邮箱的smtp设置可是打开qq邮箱设置后发现smtp项是选中的而且是不可编辑的但是为什么总是提示连接不上呢用其它的邮箱都是这个问题:是不是我的邮箱哪里设置的有问题希望有经验的人给点指点 解决方案 把具体的发送失败的错误发上来. 解决方案二: 除了qq,163等别的邮箱是否可行?先判断下你的客户端有问题还是是服务器设置的问题. 解决方案三: 邮箱设置允许pop