java实现邮件上

Java实现邮件发送:解决常见错误
该博客介绍了使用Java发送带有附件的邮件时可能会遇到的问题,包括空指针异常和AuthenticationFailedException。对于空指针异常,建议检查映射值是否为空以及文件路径的准确性。而AuthenticationFailedException可能的原因有:用户名密码错误、邮件服务器连接失败、SMTP主机名不一致以及邮箱用户名格式问题。此外,还提到了新环境下的邮箱服务器验证问题。


import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;
import org.springframework.mail.MailException;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;



public static void sendAttachmentEmail(String mailTitle,String mailHostName,String mailAuthorName,String mailAuthorPwd,String mailFrom, String mailContent,String [] mailReceiverAddress,String []attachmentPaths,String []attachmentFileNames) throws Exception {

      Properties props = new Properties();
      props.put("mail.smtp.host", mailHostName); //设置发送邮件的邮件服务器的属性(这里使用网易的smtp服务器)
      props.put("mail.smtp.auth", "true"); //需要经过授权,也就是有户名和密码的校验,这样才能通过验证(一定要有这一条)
      Session session = Session.getDefaultInstance(props); //用刚刚设置好的props对象构建一个session
      session.setDebug(false); //若为true便可以在发送邮件的过程中在console处显示过程信息,供调试使用(你可以在控制台(console)上看到发送邮件的过程)
      MimeMessage mailMessage = new MimeMessage(session); //用session为参数定义消息对象
      Transport transport = null;
      try {
       mailMessage.setFrom(new InternetAddress(mailFrom)); //设置发件人地址
       for (int i = 0; i < mailReceiverAddress.length; i++) { //发送给多个人
      mailMessage.addRecipient(Message.RecipientType.TO, new InternetAddress(mailReceiverAddress[i])); //加载收件人地址
       }
       mailMessage.setSubject(MimeUtility.encodeText(mailTitle, "UTF-8", "B")); //设置邮件标题
       Multipart multipart = new MimeMultipart(); //(MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象)向multipart对象中添加邮件的各个部分内容,包括文本内容和附件
       BodyPart bodyPart = new MimeBodyPart(); //创建一个MimeBodyPart对象
       bodyPart.setContent(mailContent, "text/html; charset=UTF-8"); //设置邮件内容
       multipart.addBodyPart(bodyPart); //将邮件内容添加到
       if(attachmentPaths.length!=attachmentFileNames.length){
     throw new Exception("附件绝对路径数量和附件文件名数量不一致!");
       }else{
      for (int i = 0; i < attachmentFileNames.length; i++) {
      bodyPart  = new MimeBodyPart(); //创建一个MimeBodyPart对象,用来添加邮件附件
          DataSource datasource  = new FileDataSource(attachmentPaths[i]+attachmentFileNames[i]); //获取附件文件
          bodyPart.setDataHandler(new DataHandler(datasource)); //将附件添加到邮件中
          bodyPart.setFileName(MimeUtility.encodeWord(attachmentFileNames[i],"gb2312", null)); //(附件名)防止中文附件文件名乱码问题
          multipart.addBodyPart(bodyPart); //将附件添加到
}
       }
       mailMessage.setSentDate(new Date()); //邮件发送时间
       mailMessage.setContent(multipart); //将multipart对象放到mailMessage中
       mailMessage.saveChanges(); //保存邮件
       transport = session.getTransport("smtp"); //发送邮件
       transport.connect(mailHostName, mailAuthorName, mailAuthorPwd); // 连接服务器的邮箱
       transport.sendMessage(mailMessage, mailMessage.getAllRecipients()); //把邮件发送出去
       transport.close(); //关闭邮件流
      } catch (Exception e) {
     log.error("邮件发送异常!!!!");
     throw e;
      }finally{
     if(null != transport){
     try {
transport.close();
} catch (MessagingException e) {
log.error("MessagingException:"+e);

     }
      }

     }





问题1:遇到保存时报空指针

        (1)检查是否有调用空的映射值。(2)检查文件存取路径是否正确。



问题2:javax.mail.AuthenticationFailedException: 535 Authentication failed

(1) 用户名密码不匹配,或者不正确

        (2) 邮件服务器连接失败

        (3) Transport发送对象的connect函数中的主机名不一致,即connect中的host("smtp.xxx.com")要跟发件人的host相同

        (4)邮件的用户名不能用全名,如oa@kingkey.com.cn,这样会导致验证密码错误而去掉用户全名后,如用:oa,这时邮件正常收发了!

        (5)邮箱服务器在新环境未验证。

     






内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)和数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化和并行计算等改进策略。; 适合人群:具备一定Python编程基础和优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值