1、什么是java mail

  JAVA MAIL是利用现有的邮件账户发送邮件的工具,通过JAVA Mail的操控,让程序自动的使用设置的邮箱发送邮件。

这一机制被广泛的用在注册激活和垃圾邮件的发送等方面。

2、邮件发送的大致过程

  1、构建一个继承自javax.mail.Authenticator的具体类,并重写里面的getPasswordAuthentication()方法。
此类是用作登录校验的,以确保你对该邮箱有发送邮件的权利。
  2、构建一个properties文件,该文件中存放SMTP服务器地址等参数。
  3、通过构建的properties文件和javax.mail.Authenticator具体类来创建一个javax.mail.Session。
Session的创建,就相当于登录邮箱一样。剩下的自然就是新建邮件。
  4、构建邮件内容,一般是javax.mail.internet.MimeMessage对象,并指定发送人,收信人,主题,内容等等。
  5、使用javax.mail.Transport工具类发送邮件。

3、准备工作

  下载JavaMail jar包,导入工程。

  http://www.oracle.com/technetwork/java/javamail/index-138643.html

4、案例代码

MyEmailAutherticator.java

  1. import javax.mail.Authenticator;
  2. import javax.mail.PasswordAuthentication;
  3.  
  4. public class MyEmailAutherticator extends Authenticator {
  5.  
  6. //用户名(登录邮箱)
  7. private String username;
  8.  
  9. //密码
  10. private String password;
  11.  
  12. public MyEmailAutherticator() {
  13. super();
  14. }
  15.  
  16. //初始化邮箱和密码
  17. public MyEmailAutherticator(String username, String password) {
  18. this.username = username;
  19. this.password = password;
  20. }
  21.  
  22. //用作登录校验,以确保对该邮箱有发送邮件的权利
  23. public PasswordAuthentication getPasswordAuthentication() {
  24. return new PasswordAuthentication(username, password);
  25. }
  26.  
  27. //set and get method
  28. public String getUsername() {
  29. return username;
  30. }
  31.  
  32. public void setUsername(String username) {
  33. this.username = username;
  34. }
  35.  
  36. public String getPassword() {
  37. return password;
  38. }
  39.  
  40. public void setPassword(String password) {
  41. this.password = password;
  42. }
  43. }

Mail.java

  1. import java.util.Date;
  2. import java.util.Properties;
  3. import javax.mail.Address;
  4. import javax.mail.Authenticator;
  5. import javax.mail.Message;
  6. import javax.mail.SendFailedException;
  7. import javax.mail.Session;
  8. import javax.mail.Transport;
  9. import javax.mail.internet.InternetAddress;
  10. import javax.mail.internet.MimeMessage;
  11.  
  12. public class Mail {
  13.  
  14. //发送邮件的帐号和密码
  15. private String username="abc123456@qq.com";
  16.  
  17. private String password="xxxxxx";
  18.  
  19. private String host = "smtp.qq.com";
  20.  
  21. private String mail_head_name = "this is head of this mail";
  22.  
  23. private String mail_head_value = "this is head of this mail";
  24.  
  25. private String mail_to = "123456789@qq.com";
  26.  
  27. private String mail_from = "abc123456@qq.com";
  28.  
  29. private String mail_subject = "this is the subject of this test mail";
  30.  
  31. private String mail_body = "this is mail_body of this test mail";
  32.  
  33. private String personalName = "我的邮件";
  34.  
  35. public void sendMail() throws SendFailedException{
  36. try {
  37. //发送邮件的props文件
  38. Properties props = new Properties();
  39. // 初始化props
  40. props.put("mail.smtp.host", host);
  41. props.put("mail.smtp.auth", "true");
  42. System.out.println(props);
  43.  
  44. //进行邮件服务用户认证
  45. Authenticator auth = new MyEmailAutherticator(username,password);
  46.  
  47. // 创建session,和邮件服务器进行通讯
  48. Session session = Session.getDefaultInstance(props,auth);
  49.  
  50. // 创建mime类型邮件
  51. MimeMessage message = new MimeMessage(session);
  52. //设置邮件格式
  53. message.setContent("Hello","text/html;charset=utf-8");
  54. // 设置主题
  55. message.setSubject(mail_subject);
  56. //设置邮件内容
  57. message.setText(mail_body);
  58. //设置邮件标题
  59. message.setHeader(mail_head_name, mail_head_value);
  60. message.setSentDate(new Date());//设置邮件发送时期
  61. Address address = new InternetAddress(mail_from,personalName);
  62. //设置邮件发送者的地址
  63. message.setFrom(address);
  64.  
  65. //======单发邮件======
  66. //设置邮件接收者的地址
  67. Address toaddress = new InternetAddress(mail_to);
  68. // 设置收件人
  69. message.addRecipient(Message.RecipientType.TO,toaddress);
  70.  
  71. //======群发邮件======
  72. // List<String> recipients = new ArrayList<String>();
  73. // recipients.add("123456789@qq.com");
  74. // recipients.add("234567890@gmail.com");
  75. // final int num = recipients.size();
  76. // InternetAddress[] addresses = new InternetAddress[num];
  77. // for (int i = 0; i < num; i++) {
  78. // addresses[i] = new InternetAddress(recipients.get(i));
  79. // }
  80. // message.setRecipients(Message.RecipientType.TO, addresses);
  81.  
  82. System.out.println(message);
  83. // 发送邮件
  84. Transport.send(message);
  85. System.out.println("Send Mail Ok!");
  86. } catch (Exception e) {
  87. e.printStackTrace();
  88. }
  89. }
  90. }

Test.java

  1. public class Test {
  2.  
  3. public static void main(String[] args) {
  4. Mail m = new Mail();
  5. try {
  6. m.sendMail();
  7. } catch (Exception e) {
  8.  
  9. }
  10. }
  11. }

2015-8-6补充代码

  1. public class Demo1 {
  2. @Test
  3. public void fun1() throws Exception {
  4. /*
  5. * 1. 得到session
  6. */
  7. Properties props = new Properties();
  8. props.setProperty("mail.host", "smtp.163.com");
  9. props.setProperty("mail.smtp.auth", "true");
  10.  
  11. Authenticator auth = new Authenticator() {
  12. @Override
  13. protected PasswordAuthentication getPasswordAuthentication() {
  14. return new PasswordAuthentication("itcast_cxf", "itcast");
  15. }
  16. };
  17.  
  18. Session session = Session.getInstance(props, auth);
  19.  
  20. /*
  21. * 2. 创建MimeMessage
  22. */
  23. MimeMessage msg = new MimeMessage(session);
  24. msg.setFrom(new InternetAddress("itcast_cxf@163.com"));//设置发件人
  25. msg.setRecipients(RecipientType.TO, "itcast_cxf@126.com");//设置收件人
  26. msg.setRecipients(RecipientType.CC, "itcast_cxf@sohu.com");//设置抄送
  27. msg.setRecipients(RecipientType.BCC, "itcast_cxf@sina.com");//设置暗送
  28.  
  29. msg.setSubject("这是来自ITCAST的测试邮件");
  30. msg.setContent("这就是一封垃圾邮件!", "text/html;charset=utf-8");
  31.  
  32. /*
  33. * 3. 发
  34. */
  35. Transport.send(msg);
  36. }
  37.  
  38. /**
  39. * 带有附件的邮件!!!
  40. */
  41. @Test
  42. public void fun2() throws Exception {
  43. /*
  44. * 1. 得到session
  45. */
  46. Properties props = new Properties();
  47. props.setProperty("mail.host", "smtp.163.com");
  48. props.setProperty("mail.smtp.auth", "true");
  49.  
  50. Authenticator auth = new Authenticator() {
  51. @Override
  52. protected PasswordAuthentication getPasswordAuthentication() {
  53. return new PasswordAuthentication("itcast_cxf", "itcast");
  54. }
  55. };
  56.  
  57. Session session = Session.getInstance(props, auth);
  58.  
  59. /*
  60. * 2. 创建MimeMessage
  61. */
  62. MimeMessage msg = new MimeMessage(session);
  63. msg.setFrom(new InternetAddress("itcast_cxf@163.com"));//设置发件人
  64. msg.setRecipients(RecipientType.TO, "itcast_cxf@126.com");//设置收件人
  65.  
  66. msg.setSubject("这是来自ITCAST的测试邮件有附件");
  67.  
  68. ////////////////////////////////////////////////////////
  69. /*
  70. * 当发送包含附件的邮件时,邮件体就为多部件形式!
  71. * 1. 创建一个多部件的部件内容!MimeMultipart
  72. * MimeMultipart就是一个集合,用来装载多个主体部件!
  73. * 2. 我们需要创建两个主体部件,一个是文本内容的,另一个是附件的。
  74. * 主体部件叫MimeBodyPart
  75. * 3. 把MimeMultipart设置给MimeMessage的内容!
  76. */
  77. MimeMultipart list = new MimeMultipart();//创建多部分内容
  78.  
  79. // 创建MimeBodyPart
  80. MimeBodyPart part1 = new MimeBodyPart();
  81. // 设置主体部件的内容
  82. part1.setContent("这是一封包含附件的垃圾邮件", "text/html;charset=utf-8");
  83. // 把主体部件添加到集合中
  84. list.addBodyPart(part1);
  85.  
  86. // 创建MimeBodyPart
  87. MimeBodyPart part2 = new MimeBodyPart();
  88. part2.attachFile(new File("F:/f/白冰.jpg"));//设置附件的内容
  89. part2.setFileName(MimeUtility.encodeText("大美女.jpg"));//设置显示的文件名称,其中encodeText用来处理中文乱码问题
  90. list.addBodyPart(part2);
  91.  
  92. msg.setContent(list);//把它设置给邮件作为邮件的内容。
  93.  
  94. ////////////////////////////////////////////////////////
  95.  
  96. /*
  97. * 3. 发
  98. */
  99. Transport.send(msg);
  100. }
  101.  
  102. }

Java Mail邮件发送的简单实现的更多相关文章

  1. java mail邮件发送(带附件) 支持SSL

    java mail邮件发送(带附件)有三个类 MailSenderInfo.java package mail; import java.util.Properties; import java.ut ...

  2. Java Mail 邮件发送简单封装

    上一篇文章我们用写了一个Java Mail 的Demo,相信你已经可以用那个例子来发送邮件了.但是Demo 有很多的问题. 首先每次发送需要配置的东西很多,包括发件人的邮箱和密码.smtp服务器和SM ...

  3. Java Mail 邮件发送Demo

    上周公司的项目要求开发邮件发送功能.自己在网上跟着教程边学边做了一下午,现在基本开发完成了.由于一个同事也想看下该怎么写,顺便学习下.所以我就写成了一遍教程,顺便巩固下邮件发送里面的内容. Demo ...

  4. Spring mail 邮件发送的简单实现

    package cn.taskSys.utils; import java.util.Properties; import org.springframework.mail.MailException ...

  5. 用java实现邮件发送验证码

    java实现邮件发送验证码 建议不要用qq邮箱,我使用qq邮箱直接一直给我报530错误,我一直认为我代码写的有错误或者POP3/SMTP服务没弄好.所以建议注册个别的邮箱,我就申请了个网易163邮箱瞬 ...

  6. 基于JavaMail的Java邮件发送:简单邮件发送

    使用Java应用程序发送 E-mail 十分简单,但是首先你应该在你的机器上安装 JavaMail API 和Java Activation Framework (JAF) . 您可以从 Java 网 ...

  7. JAVA邮件发送的简单实现

    JAVA MAIL是利用现有的邮件账户发送邮件的工具,比如说,我在网易注册一个邮箱账户,通过JAVA Mail的操控,我可以不亲自登录网易邮箱,让程序自动的使用网易邮箱发送邮件.这一机制被广泛的用在注 ...

  8. 基于Java Mail 进行发送(带附件和压缩附件)的邮件

    刚进公司的training, 下面是要求: Self-study of Java Mail library:  http://www.oracle.com/technetwork/java/javam ...

  9. 【Java EE 学习 21 下】【使用java实现邮件发送、邮件验证】

    一.邮件发送 1.邮件发送使用SMTP协议或者IMAP协议,这里使用SMTP协议演示. SMTP协议使用的端口号:25 rfc821详细记载了该协议的相关信息 (1)使用telnet发送邮件(使用12 ...

随机推荐

  1. [转]解读Unity中的CG编写Shader系列二

    上一篇文章的例子中我们可以看到顶点着色器的输出参数可以说是直接作为了片段着色器的形参传递过来,那么不由得一个问题浮现出来,顶点着色器的形参是从何处传递过来的? 顶点着色器的形参是gameObject ...

  2. Atcoder Grand Contest 031C(构造,思维,异或,DFS)

    #include<bits/stdc++.h>using namespace std;int n,a,b,sum;void dfs(int x,int y,int ban){    if( ...

  3. 6w4:第六周程序填空题1

    描述 下面程序的输出结果是: A::Fun C::Do 请填空: #include <iostream> using namespace std; class A { private: i ...

  4. 单机,伪分布式,完全分布式-----搭建Hadoop大数据平台

    Hadoop大数据——随着计算机技术的发展,互联网的普及,信息的积累已经到了一个非常庞大的地步,信息的增长也在不断的加快.信息更是爆炸性增长,收集,检索,统计这些信息越发困难,必须使用新的技术来解决这 ...

  5. 将php命令加入cenos环境变量

    0.修改/etc/profile文件使其永久性生效,并对所有系统用户生效,在文件末尾加上如下两行代码 1.PATH=$PATH:/usr/local/webserver/php/bin:/usr/lo ...

  6. 月薪3万+的大数据人都在疯学Flink,为什么?

    身处大数据圈近5年了,在我的概念里一直认为大数据最牛的两个东西是Hadoop和Spark.18年下半年的时候,我突然发现身边很多大数据牛人都是研究学习Flink,甚至连Spark都大有被冷落抛弃的感觉 ...

  7. js实现斐波那契数列

    1:递归 function fb1(n){     if(n <= 2){         return 1;        }else{         return fb1(n-1) + f ...

  8. 洛谷 P1800 software_NOI导刊2010提高(06)

    题目链接 题解 二分答案+dp 如果我们知道答案,贪心地想,让每个人做尽量多的模块一定不会比最优解差 \(f[i][j]\)表示前\(i\)个人第一个模块做了\(j\)块,第二个模块最多能做多少 然后 ...

  9. HDU - 2089 数位DP 初步

    中文题目,不要62和4 从高位往低位DP,注意有界标志limit的传递 dp2记忆有界情况下的计数结果,据说用处不大 我所参考的入门文章就是半搜索(有界)半记忆(无界)的 进阶指南中提出dfs维度有多 ...

  10. 玩转微信2次开发1_交互通信api.php(微擎版)

    在2次开发中,涉及到比较多的也比较繁琐的就是服务器和微信服务器的交互 用户在公众号里操作回复关键词都会让微信服务器和开发者的服务器进行交互 用户一旦关注了某某公众号--微信后台会去查询该公众号是否连接 ...