0


基于java Email的电子邮件发送

Email 电子邮件,用java实现email的发送,首先我们需要了解一下email发送的大概过程。简单来说,发送email,需要从用户的电脑邮件软件(MUA),发送到邮件服务器(MTA)上,在通过若干个邮件服务器的中转,最后到达收件人的邮件服务器(MDA),收件人就可以通过邮件软件(MUA)接收邮件了。

  1. 看完email传送过程后,我们再来了解一下三种常见的邮件协议

SMTP协议:

  1. SMTP(Simple Mail Transfer Protocol),简单邮件传输协议。它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。SMTP协议属于TCP/IP协议簇。SMTP服务器就是遵循SMTP协议的“发送邮件"服务器

POP3协议:

  1. POP3(Post Office Protocol 3),邮局协议的第3个版本,它规定怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的电子协议。 POP3允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时删除保存在邮件服务器上的邮件。POP3服务器是遵循POP3协议的 接收邮件服务器,用来接“收电子邮件”的。

IMAP协议:

  1. IMAP全称是Internet Mail Access Protocol,即交互式邮件存取协议,它是跟POP3类似邮件访问标准协议之不同的是,开启了IMAP后,您在电子邮件客户端收权的邮件仍然保留在服务器上,同时在客户端上的操作都 会反馈到服务器上,如:删除邮件,标记已读等, 服务器上的邮件也会做相应的动作。所以无论从浏览器登录邮箱或者客户端软件登录邮箱,看到的邮件以及状态都是一致的。

发送一个电子邮件:

  1. 如何用Java实现邮件的发送,实质上就是编写一个可以发送邮件的低配MUA;发送邮件,需要通过发送协议SMTP协议。发送邮件前,我们需要确定作为MTA的邮件服务器地址和端口号,邮件服务器的地址通常是smtp.***.com,端口号由邮件服务商确定(可以查到)。下面的案列用126wei标准。准备好SMTP登录信息后,我们需要导入javaMail相关依赖的jar包。

在正式写邮件发送类之前,我们需要创建一个工具类JavaMailUtills。

1、创建session对象,直接调用其中的createSession()方法,需要传入两个参数:第一个properties对象,用来存SMTP服务器的连接信息。第二个是用户认证对象(Authenticator接口的匿名实现类);当我们获取到Session实例后,打开debug模式便于我们查看SMTP通信的详细内容,便于调试。

代码示例:

  1. import java.util.Properties;
  2. import javax.mail.Authenticator;
  3. import javax.mail.PasswordAuthentication;
  4. import javax.mail.Session;
  5. //创建session的工具类
  6. public class javaMailUtils {
  7. public static Session creatSession() {
  8. //SMTP服务器地址
  9. String smtp="smtp.126.com";
  10. //邮箱账号和密码
  11. String userName="ddupei@126.com";
  12. String password="MJEUJFLIIUSUNGGT";//授权密码
  13. //SMTP服务器的连接信息
  14. Properties props=new Properties();
  15. props.put("mail.smtp.host", smtp);//SMTP主机名
  16. props.put("mail.smtp.port", 25);//主机端口号
  17. props.put("mail.smtp.auth", "true");//是否需要用户验证
  18. props.put("mail.smtp.starttls.enable", "true"); //启用TLS加密
  19. //创建Session
  20. //参数1:SMTP服务器的连接信息
  21. //参数2:用户认证对象(Authenticator接口的匿名实现类)
  22. Session session=Session.getInstance(props, new Authenticator() {
  23. @Override
  24. protected PasswordAuthentication getPasswordAuthentication() {
  25. return new PasswordAuthentication(userName, password);
  26. }
  27. });
  28. //开启调试模式
  29. session.setDebug(true);
  30. System.out.println(session);
  31. return session;
  32. }
  33. }

工具类准备好后,我们就可以正式开始写发送邮件的内容了:

  1. 发送邮件时我们需要先创建一个邮件message对象,传入session对象;最后在调用Transport.send(message);发送邮件

邮件对象的方法设置如下:

  1. msg.setFrom(new InternetAddress("xxx@126.com")); //发件人
  2. msg.setRecipients(RecipientType.TO, "xxxx@qq.com"); //收件人
  3. //RecipientType.TO:收件人
  4. //RecipientType.CC:抄送人
  5. msg.setSubject("课堂测试邮件"); //标题
  6. msg.setText("<b>今日有雨</b>,出门记得带伞哦!","utf-8","html");//正文
  7. Transport.send(msg); //发送邮件
  1. 如果发送的邮件内容含有附件且附件内容需要在正文里显示时,我们需要创建一个邮件内容“复合”对象Multipart。再用BodyPart设置正文内容和上传附件。最后再用message.setContent(multipart);把复合内容添加到邮件对象;最后发送邮件对象。
  1. import java.io.IOException;
  2. import java.nio.file.Files;
  3. import java.nio.file.Path;
  4. import java.nio.file.Paths;
  5. import javax.activation.DataHandler;
  6. import javax.mail.BodyPart;
  7. import javax.mail.MessagingException;
  8. import javax.mail.Multipart;
  9. import javax.mail.Session;
  10. import javax.mail.Transport;
  11. import javax.mail.internet.InternetAddress;
  12. import javax.mail.internet.MimeBodyPart;
  13. import javax.mail.internet.MimeMessage;
  14. import javax.mail.internet.MimeMessage.RecipientType;
  15. import javax.mail.internet.MimeMultipart;
  16. import javax.mail.util.ByteArrayDataSource;
  17. public class Demo04 {
  18. public static void main(String[] args) {
  19. try {
  20. //创建Session
  21. Session session=javaMailUtils.creatSession();
  22. //创建邮件对象
  23. MimeMessage message=new MimeMessage(session);
  24. message.setFrom(new InternetAddress("xxxx@126.com"));
  25. message.setRecipients(RecipientType.TO, "xxxx@qq.com");
  26. message.setSubject("图片在正文里的测试邮件");
  27. //正文部分(附件图片+文字内容)
  28. BodyPart textBodyPart=new MimeBodyPart();
  29. StringBuilder body=new StringBuilder();
  30. body.append("<h1>附件图片名称</h1>");
  31. body.append("<img src=\"cid:imageName\"/>");//通过内容ID引用附件图片
  32. body.append("当我看到花瓣<b>脱离</b>花蕊慢慢枯萎");
  33. textBodyPart.setContent(body.toString(),"text/html;charset=utf-8");
  34. //邮件部分
  35. BodyPart imagePart=new MimeBodyPart();
  36. imagePart.setFileName("aaa.jpg");
  37. imagePart.setDataHandler(new DataHandler(
  38. new ByteArrayDataSource( Files.readAllBytes(Paths.get("本地图片地址\\本地图片名称.jpg")),
  39. "application/octet-stream")));
  40. imagePart.setHeader("Content-ID", "<imageName>");//设置内容ID
  41. //组合正文+附件
  42. Multipart multipart=new MimeMultipart();
  43. multipart.addBodyPart(textBodyPart);
  44. multipart.addBodyPart(imagePart);
  45. //添加到邮件对象
  46. message.setContent(multipart);
  47. //发送
  48. Transport.send(message);
  49. } catch (MessagingException e) {
  50. // TODO Auto-generated catch block
  51. e.printStackTrace();
  52. } catch (IOException e) {
  53. // TODO Auto-generated catch block
  54. e.printStackTrace();
  55. }
  56. }
  57. }
标签: java jvm 开发语言

本文转载自: https://blog.csdn.net/weixin_53233753/article/details/125835368
版权归原作者 吧唧! 所有, 如有侵权,请联系我们删除。

“基于java Email的电子邮件发送”的评论:

还没有评论