经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » Java » 查看文章
Java收发邮件过程中具体的功能是怎么实现的
来源:cnblogs  作者:山风和薰  时间:2018/10/15 9:07:24  对本文有异议

SMTP协议

用户连上邮件服务器后,要想给它发送一封电子邮件,需要遵循一定的通迅规则,SMTP协议就是用于定义这种通讯规则的。

因而,通常我们也把处理用户smtp请求(邮件发送请求)的邮件服务器称之为SMTP服务器。(25)

POP3协议

同样,用户若想从邮件服务器管理的电子邮箱中接收一封电子邮件的话,他连上邮件服务器后,也需要遵循一定的通迅格式,POP3协议用于定义这种通讯格式。

因而,通常我们也把处理用户pop3请求(邮件接收请求)的邮件服务器称之为POP3服务器。(110)

下图用于演示两帐户相互发送邮件的过程
image

JavaMail API按其功能划分通常可分为如下三大类:

创建和解析邮件内容的API :Message类是创建和解析邮件的核心API,它的实例对象代表一封电子邮件。

发送邮件的API:

Transport类是发送邮件的核心API类,它的实例对象代表实现了某个邮件发送协议的邮件发送对象,例如SMTP协议。

接收邮件的API:Store类是接收邮件的核心API类,它的实例对象代表实现了某个邮件接收协议的邮件接收对象,例如POP3协议。

Session类

Session类用于定义整个应用程序所需的环境信息,以及收集客户端与邮件服务器建立网络连接的会话信息,如邮件服务器的主机名、端口号、采用的邮件发送和接收协议等。Session对象根据这些信息构建用于邮件收发的Transport和Store对象,以及为客户端创建Message对象时提供信息支持。
image

邮件组织结构相关的API

MimeMessage类表示整封邮件。

MimeBodyPart类表示邮件的一个MIME消息。

MimeMultipart类表示一个由多个MIME消息组合成的组合MIME消息。

image

具体的例子程序

  1. package cn.edu.dlmu.send;
  2. import java.util.Properties;
  3. import javax.activation.DataHandler;
  4. import javax.activation.FileDataSource;
  5. import javax.mail.Message;
  6. import javax.mail.Session;
  7. import javax.mail.Transport;
  8. import javax.mail.internet.InternetAddress;
  9. import javax.mail.internet.MimeBodyPart;
  10. import javax.mail.internet.MimeMessage;
  11. import javax.mail.internet.MimeMultipart;
  12. import javax.mail.internet.MimeUtility;
  13. public class SendMail {
  14. public static void main(String[] args) throws Exception {
  15. Properties prop = new Properties();
  16. //连接的邮件服务器的主机名
  17. prop.setProperty("mail.smtp.host", "smtp.sina.com.cn");
  18. //发送邮件的协议
  19. prop.setProperty("mail.transport.protocol", "smtp");
  20. //是否向邮件服务器提交认证
  21. prop.setProperty("mail.smtp.auth", "true");
  22. //创建session
  23. Session session = Session.getInstance(prop);
  24. session.setDebug(true);
  25. //得到transport
  26. Transport ts = session.getTransport();
  27. //连接邮件服务器
  28. ts.connect("smtp.sina.com.cn", "xxxx@sina.com", "xxxxx");
  29. //发送邮件
  30. MimeMessage message = createMessage(session);
  31. ts.sendMessage(message, message.getAllRecipients());
  32. ts.close();
  33. }
  34. public static MimeMessage createMessage(Session session) throws Exception {
  35. MimeMessage message = new MimeMessage(session);
  36. //设置邮件的基本信息
  37. message.setFrom(new InternetAddress("xxxx@sina.com"));
  38. message.setRecipient(Message.RecipientType.TO, new InternetAddress("1219070362@qq.com"));
  39. message.setSubject("test");
  40. //正文
  41. MimeBodyPart text = new MimeBodyPart();
  42. //设置charaset可以解决中文正文的乱码问题,内嵌可下载的图片
  43. text.setContent("你好xxx,<img src='c:/dog.jpg' />测试成功!<img src='cid:aaa.jpg' />", "text/html;charset=gbk");
  44. //图片1
  45. MimeBodyPart image = new MimeBodyPart();
  46. image.setDataHandler(new DataHandler(new FileDataSource("src/88.jpg")));
  47. image.setContentID("aaa.jpg");
  48. //附件
  49. MimeBodyPart attach = new MimeBodyPart();
  50. DataHandler dh = new DataHandler(new FileDataSource("src/javamail架包.jar"));
  51. attach.setDataHandler(dh);
  52. //解决文件中文乱码问题
  53. attach.setFileName(MimeUtility.encodeText(dh.getName()));
  54. //描述正文和图片的关系
  55. MimeMultipart mp = new MimeMultipart();
  56. mp.addBodyPart(text);
  57. mp.addBodyPart(image);
  58. mp.setSubType("related");
  59. //描述正文和附件
  60. MimeMultipart mp2 = new MimeMultipart();
  61. mp2.addBodyPart(attach);
  62. //将正文封装为一个body
  63. MimeBodyPart content = new MimeBodyPart();
  64. content.setContent(mp);
  65. mp2.addBodyPart(content);
  66. mp2.setSubType("mixed");
  67. message.setContent(mp2);
  68. message.saveChanges();
  69. return message;
  70. }
  71. }
 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号