ITPub博客

首页 > 架构设计 > 软件结构 > 三十九、java版 SpringCloud分布式微服务云架构之Java 发送邮件

三十九、java版 SpringCloud分布式微服务云架构之Java 发送邮件

原创 软件结构 作者:JIAN2 时间:2021-10-25 10:34:02 0 删除 编辑

Java 发送邮件 

使用Java应用程序发送 E-mail 十分简单,但是首先你应该在你的机器上安装 JavaMail API 和Java Activation Framework (JAF) 。 推荐分布式架构源码 需要框架源码的朋友可以看我个人简介联系我


 

您可以从 Java 网站下载最新版本的 JavaMail,打开网页右侧有个 Downloads 链接,点击它下载。
您可以从 Java 网站下载最新版本的 JAF(版本 1.1.1)。

 下载并解压缩这些文件,在新创建的顶层目录中,您会发现这两个应用程序的一些 jar 文件。您需要把  mail.jar 和  activation.jar 文件添加到您的 CLASSPATH 中。

如果你使用第三方邮件服务器如QQ的SMTP服务器,可查看文章底部用户认证完整的实例。


发送一封简单的 E-mail

下面是一个发送简单E-mail的例子。假设你的本地主机已经连接到网络。

SendEmail.java 文件代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
// 文件名 SendEmail.java
  
import  java.util.*;
import  javax.mail.*;
import  javax.mail.internet.*;
import  javax.activation.*;
  
public  class  SendEmail
{
    public  static  void  main( String  [] args)
    {   
       // 收件人电子邮箱
       String  to =  "abcd@gmail.com" ;
  
       // 发件人电子邮箱
       String  from =  "web@gmail.com" ;
  
       // 指定发送邮件的主机为 localhost
       String  host =  "localhost" ;
  
       // 获取系统属性
       Properties properties = System.getProperties();
  
       // 设置邮件服务器
       properties.setProperty( "mail.smtp.host" , host);
  
       // 获取默认session对象
       Session session = Session.getDefaultInstance(properties);
  
       try {
          // 创建默认的 MimeMessage 对象
          MimeMessage message =  new  MimeMessage(session);
  
          // Set From: 头部头字段
          message.setFrom( new  InternetAddress(from));
  
          // Set To: 头部头字段
          message.addRecipient(Message.RecipientType.TO,
                                   new  InternetAddress(to));
  
          // Set Subject: 头部头字段
          message.setSubject( "This is the Subject Line!" );
  
          // 设置消息体
          message.setText( "This is actual message" );
  
          // 发送消息
          Transport.send(message);
          System.out.println( "Sent message successfully...." );
       } catch  (MessagingException mex) {
          mex.printStackTrace();
       }
    }
}

编译并运行这个程序来发送一封简单的E-mail:

1
2
$ java SendEmail
Sent message successfully....

如果你想发送一封e-mail给多个收件人,那么使用下面的方法来指定多个收件人ID:

1
2
3
void  addRecipients(Message.RecipientType type,
                    Address[] addresses)
throws MessagingException

下面是对于参数的描述:

  • type:要被设置为 TO, CC 或者 BCC,这里 CC 代表抄送、BCC 代表秘密抄送。举例: Message.RecipientType.TO

  • addresses: 这是 email ID 的数组。在指定电子邮件 ID 时,你将需要使用 InternetAddress() 方法。


发送一封 HTML E-mail

下面是一个发送 HTML E-mail 的例子。假设你的本地主机已经连接到网络。

和上一个例子很相似,除了我们要使用 setContent() 方法来通过第二个参数为 "text/html",来设置内容来指定要发送HTML 内容。

SendHTMLEmail.java 文件代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
// 文件名 SendHTMLEmail.java
  
import  java.util.*;
import  javax.mail.*;
import  javax.mail.internet.*;
import  javax.activation.*;
  
public  class  SendHTMLEmail
{
    public  static  void  main( String  [] args)
    {
      
       // 收件人电子邮箱
       String  to =  "abcd@gmail.com" ;
  
       // 发件人电子邮箱
       String  from =  "web@gmail.com" ;
  
       // 指定发送邮件的主机为 localhost
       String  host =  "localhost" ;
  
       // 获取系统属性
       Properties properties = System.getProperties();
  
       // 设置邮件服务器
       properties.setProperty( "mail.smtp.host" , host);
  
       // 获取默认的 Session 对象。
       Session session = Session.getDefaultInstance(properties);
  
       try {
          // 创建默认的 MimeMessage 对象。
          MimeMessage message =  new  MimeMessage(session);
  
          // Set From: 头部头字段
          message.setFrom( new  InternetAddress(from));
  
          // Set To: 头部头字段
          message.addRecipient(Message.RecipientType.TO,
                                   new  InternetAddress(to));
  
          // Set Subject: 头字段
          message.setSubject( "This is the Subject Line!" );
  
          // 发送 HTML 消息, 可以插入html标签
          message.setContent( "<h1>This is actual message</h1>" ,
                             "text/html"  );
  
          // 发送消息
          Transport.send(message);
          System.out.println( "Sent message successfully...." );
       } catch  (MessagingException mex) {
          mex.printStackTrace();
       }
    }
}

编译并运行此程序来发送HTML e-mail:

1
2
$ java SendHTMLEmail
Sent message successfully....

发送带有附件的 E-mail

下面是一个发送带有附件的 E-mail的例子。假设你的本地主机已经连接到网络。

SendFileEmail.java 文件代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
// 文件名 SendFileEmail.java
  
import  java.util.*;
import  javax.mail.*;
import  javax.mail.internet.*;
import  javax.activation.*;
  
public  class  SendFileEmail
{
    public  static  void  main( String  [] args)
    {
      
       // 收件人电子邮箱
       String  to =  "abcd@gmail.com" ;
  
       // 发件人电子邮箱
       String  from =  "web@gmail.com" ;
  
       // 指定发送邮件的主机为 localhost
       String  host =  "localhost" ;
  
       // 获取系统属性
       Properties properties = System.getProperties();
  
       // 设置邮件服务器
       properties.setProperty( "mail.smtp.host" , host);
  
       // 获取默认的 Session 对象。
       Session session = Session.getDefaultInstance(properties);
  
       try {
          // 创建默认的 MimeMessage 对象。
          MimeMessage message =  new  MimeMessage(session);
  
          // Set From: 头部头字段
          message.setFrom( new  InternetAddress(from));
  
          // Set To: 头部头字段
          message.addRecipient(Message.RecipientType.TO,
                                   new  InternetAddress(to));
  
          // Set Subject: 头字段
          message.setSubject( "This is the Subject Line!" );
  
          // 创建消息部分
          BodyPart messageBodyPart =  new  MimeBodyPart();
  
          // 消息
          messageBodyPart.setText( "This is message body" );
         
          // 创建多重消息
          Multipart multipart =  new  MimeMultipart();
  
          // 设置文本消息部分
          multipart.addBodyPart(messageBodyPart);
  
          // 附件部分
          messageBodyPart =  new  MimeBodyPart();
          String  filename =  "file.txt" ;
          DataSource source =  new  FileDataSource(filename);
          messageBodyPart.setDataHandler( new  DataHandler(source));
          messageBodyPart.setFileName(filename);
          multipart.addBodyPart(messageBodyPart);
  
          // 发送完整消息
          message.setContent(multipart );
  
          //   发送消息
          Transport.send(message);
          System.out.println( "Sent message successfully...." );
       } catch  (MessagingException mex) {
          mex.printStackTrace();
       }
    }
}

编译并运行你的程序来发送一封带有附件的邮件。

1
2
$ java SendFileEmail
Sent message successfully....

用户认证部分

如果需要提供用户名和密码给e-mail服务器来达到用户认证的目的,你可以通过如下设置来完成:

1
2
3
props.put( "mail.smtp.auth" ,  "true" );
props.setProperty( "mail.user" ,  "myuser" );
props.setProperty( "mail.password" ,  "mypwd" );

e-mail其他的发送机制和上述保持一致。

需要用户名密码验证邮件发送实例:

本实例以 QQ 邮件服务器为例,你需要在登录QQ邮箱后台在"设置"=》账号中开启POP3/SMTP服务 ,如下图所示:

QQ 邮箱通过生成授权码来设置密码:

Java 代码如下:

SendEmail2.java 文件代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
// 需要用户名密码邮件发送实例
//文件名 SendEmail2.java
//本实例以QQ邮箱为例,你需要在qq后台设置
  
import  java.util.Properties;
  
import  javax.mail.Authenticator;
import  javax.mail.Message;
import  javax.mail.MessagingException;
import  javax.mail.PasswordAuthentication;
import  javax.mail.Session;
import  javax.mail.Transport;
import  javax.mail.internet.InternetAddress;
import  javax.mail.internet.MimeMessage;
  
public  class  SendEmail2
{
    public  static  void  main( String  [] args)
    {
       // 收件人电子邮箱
       String  to =  "xxx@qq.com" ;
  
       // 发件人电子邮箱
       String  from =  "xxx@qq.com" ;
  
       // 指定发送邮件的主机为 smtp.qq.com
       String  host =  "smtp.qq.com" ;   //QQ 邮件服务器
  
       // 获取系统属性
       Properties properties = System.getProperties();
  
       // 设置邮件服务器
       properties.setProperty( "mail.smtp.host" , host);
  
       properties.put( "mail.smtp.auth" ,  "true" );
       // 获取默认session对象
       Session session = Session.getDefaultInstance(properties, new  Authenticator(){
         public  PasswordAuthentication getPasswordAuthentication()
         {
          return  new  PasswordAuthentication( "xxx@qq.com" ,  "qq邮箱授权码" );  //发件人邮件用户名、授权码
         }
        });
  
       try {
          // 创建默认的 MimeMessage 对象
          MimeMessage message =  new  MimeMessage(session);
  
          // Set From: 头部头字段
          message.setFrom( new  InternetAddress(from));
  
          // Set To: 头部头字段
          message.addRecipient(Message.RecipientType.TO,
                                   new  InternetAddress(to));
  
          // Set Subject: 头部头字段
          message.setSubject( "This is the Subject Line!" );
  
          // 设置消息体
          message.setText( "This is actual message" );
  
          // 发送消息
          Transport.send(message);
          System.out.println( "Sent message successfully....from minglisoft.cn" );
       } catch  (MessagingException mex) {
          mex.printStackTrace();
       }
    }
}




来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70006413/viewspace-2839016/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
华为资深架构师,曾参与华为数据中心迁移解决方案!有需要了解分布式微服务电商源码的朋友可以+我 v ❤: haiwabbc2 , 10余年互联网研发行业经验!博客里面是个人的一点技术总结,希望能够帮助到更多的IT朋友成长!

注册时间:2021-09-06

  • 博文量
    1404
  • 访问量
    622805