【Java邮件开发】5.编写一个JavaMail发送邮件的程序

时间:2021-06-23 19:01:18

之前我们对JavaMail的API进行了简单的介绍,并下载了相应的jar包。
这次,我们要着手使用JavaMail开发一个可以发送邮件的程序。

1.创建工程
首先我们在Eclipse中新建一个名为JavaMailTest的工程:

【Java邮件开发】5.编写一个JavaMail发送邮件的程序

【Java邮件开发】5.编写一个JavaMail发送邮件的程序


然后我们新建一个lib文件夹,将mail.jar放入文件夹中,然后右键选择
Build Path-->add to build path将其引入开发环境中:
【Java邮件开发】5.编写一个JavaMail发送邮件的程序

在工程中新建一个位于cn.com.javamail包下的类,名为JavaMailTest1:
【Java邮件开发】5.编写一个JavaMail发送邮件的程序

2.编写代码
我们在JavaMailTest1类中创建一个main函数:

[java] view plain copy 
  1. package cn.com.javamail;  
  2.   
  3. public class JavaMailTest1 {  
  4.     public static void main(String[] args) {  
  5.           
  6.     }  
  7. }  


我们要编写发送邮件的程序,就必须先创建一封邮件,我们来编写创建邮件
信息的代码。

使用JavaMail发送一封简单邮件的步骤:
(1)创建代表邮件服务器的网络连接信息的Session对象。
(2)创建代表邮件内容的Message对象
(3)创建Transport对象、连接服务器、发送Message、关闭连接。

我们的代码编写如下:

[java] view plain copy 
  1. package cn.com.javamail;  
  2.   
  3. import java.util.Properties;  
  4.   
  5. import javax.mail.Address;  
  6. import javax.mail.Message;  
  7. import javax.mail.MessagingException;  
  8. import javax.mail.Session;  
  9. import javax.mail.Transport;  
  10. import javax.mail.internet.InternetAddress;  
  11. import javax.mail.internet.MimeMessage;  
  12.   
  13. public class JavaMailTest1 {  
  14.       
  15.     public static int ReceivedCount=1;//接收邮件地址的数组大小  
  16.       
  17.     public static void main(String[] args) throws MessagingException {  
  18.           
  19.         //1.创建信息配置对象,并配置相应信息  
  20.         Properties props = new Properties();  
  21.         //属性mail.debug是确定是否是开发模式,true为是,false为否  
  22.         //属性mail.transport.protocol设置要使用的邮件协议  
  23.         //属性mail.smtp.auth设置发送时是否校验用户名和密码  
  24.         //还有其他属性,请查看相关文档  
  25.         props.setProperty("mail.debug", "true");  
  26.         props.setProperty("mail.transport.protocol", "smtp");  
  27.         props.setProperty("mail.smtp.auth", "true");  
  28.           
  29.         //2.通过配置信息创建session对像  
  30.         Session session = Session.getInstance(props);  
  31.         //session设置dbug的时候会将整个邮件交互过程信息打印早控制台  
  32.         session.setDebug(true);  
  33.           
  34.         //3.通过session对象获取Message邮件信息对象  
  35.         Message msg = new MimeMessage(session);  
  36.         //设置邮件信息对象的各种字段信息  
  37.         msg.setText("你好朋友!");//邮件正文  
  38.         msg.setFrom(new InternetAddress("emailtest3087@sina.com"));//邮件接收地址  
  39.           
  40.         //3.获取传输对象,进行邮件发送  
  41.         Transport transport= session.getTransport();  
  42.         //连接信息:邮件服务器地址,端口号,用户名,密码  
  43.         transport.connect("smtp.sina.com",25,"emailtest3087", "123qwe");  
  44.         //创建邮件接收地址数组,并放置一个邮箱接收地址。  
  45.         Address [] addresies=new Address[ReceivedCount];//数组大小为上面的成员变量指定  
  46.         addresies[0]=new InternetAddress("emailtest3842@126.com");  
  47.         transport.sendMessage(msg,addresies);  
  48.           
  49.         //4.关闭传输对象  
  50.         transport.close();//关闭传输对象  
  51.     }  
  52. }  


运行结果:

[plain] view plain copy 
  1. DEBUG: JavaMail version 1.4.7  
  2. DEBUG: successfully loaded resource: /META-INF/javamail.default.providers  
  3. DEBUG: Tables of loaded providers  
  4. DEBUG: Providers Listed By Class Name: {com.sun.mail.smtp.SMTPSSLTransport=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Oracle], com.sun.mail.smtp.SMTPTransport=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Oracle], com.sun.mail.imap.IMAPSSLStore=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Oracle], com.sun.mail.pop3.POP3SSLStore=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Oracle], com.sun.mail.imap.IMAPStore=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Oracle], com.sun.mail.pop3.POP3Store=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Oracle]}  
  5. DEBUG: Providers Listed By Protocol: {imaps=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Oracle], imap=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Oracle], smtps=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Oracle], pop3=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Oracle], pop3s=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Oracle], smtp=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Oracle]}  
  6. DEBUG: successfully loaded resource: /META-INF/javamail.default.address.map  
  7. DEBUG: setDebug: JavaMail version 1.4.7  
  8. DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Oracle]  
  9. DEBUG SMTP: useEhlo true, useAuth true  
  10. DEBUG SMTP: trying to connect to host "smtp.sina.com", port 25, isSSL false  
  11. 220 smtp-2-32.smtpsmail.fmail.yf.sinanode.com ESMTP  
  12. DEBUG SMTP: connected to host "smtp.sina.com", port: 25  
  13.   
  14.   
  15. EHLO LAPTOP-79JCNN74  
  16. 250-smtp-2-32.smtpsmail.fmail.yf.sinanode.com  
  17. 250-AUTH LOGIN PLAIN  
  18. 250-AUTH=LOGIN PLAIN  
  19. 250-STARTTLS  
  20. 250 8BITMIME  
  21. DEBUG SMTP: Found extension "AUTH", arg "LOGIN PLAIN"  
  22. DEBUG SMTP: Found extension "AUTH=LOGIN", arg "PLAIN"  
  23. DEBUG SMTP: Found extension "STARTTLS", arg ""  
  24. DEBUG SMTP: Found extension "8BITMIME", arg ""  
  25. DEBUG SMTP: Attempt to authenticate using mechanisms: LOGIN PLAIN DIGEST-MD5 NTLM   
  26. DEBUG SMTP: AUTH LOGIN command trace suppressed  
  27. DEBUG SMTP: AUTH LOGIN succeeded  
  28. DEBUG SMTP: use8bit false  
  29. MAIL FROM:<emailtest3087@sina.com>  
  30. 250 ok  
  31. RCPT TO:<emailtest3842@126.com>  
  32. 250 ok  
  33. DEBUG SMTP: Verified Addresses  
  34. DEBUG SMTP:   emailtest3842@126.com  
  35. DATA  
  36. 354 End data with <CR><LF>.<CR><LF>  
  37. From: emailtest3087@sina.com  
  38. Message-ID: <1311159931.0.1492350927193.JavaMail."wuliII"@LAPTOP-79JCNN74>  
  39. MIME-Version: 1.0  
  40. Content-Type: text/plain; charset=GBK  
  41. Content-Transfer-Encoding: base64  
  42.   
  43.   
  44. xOO6w8Xz09GjoQ==  
  45. .  
  46. 250 ok queue id 249384396005  
  47. QUIT  
  48. 221 smtp-2-32.smtpsmail.fmail.yf.sinanode.com  


分析结果:
其中,我们可以看到,程序首先连接了位于25号端口的sina的SMTP服务器:
DEBUG SMTP: trying to connect to host "smtp.sina.com", port 25, isSSL false
220 smtp-2-32.smtpsmail.fmail.yf.sinanode.com ESMTP
DEBUG SMTP: connected to host "smtp.sina.com", port: 25

然后进行了auth验证,验证了用户名和密码是否正确:
DEBUG SMTP: Attempt to authenticate using mechanisms: LOGIN PLAIN DIGEST-MD5 NTLM 
DEBUG SMTP: AUTH LOGIN command trace suppressed
DEBUG SMTP: AUTH LOGIN succeeded

通过succeeded可以看到连接是通过的。然后就是组装邮件信息:
MAIL FROM:<emailtest3087@sina.com>
250 ok
RCPT TO:<emailtest3842@126.com>
250 ok
DEBUG SMTP: Verified Addresses
DEBUG SMTP:   emailtest3842@126.com
DATA
354 End data with <CR><LF>.<CR><LF>
From: emailtest3087@sina.com
Message-ID: <1311159931.0.1492350927193.JavaMail."wuliII"@LAPTOP-79JCNN74>
MIME-Version: 1.0
Content-Type: text/plain; charset=GBK
Content-Transfer-Encoding: base64

之后成功发送邮件,并推出发送邮箱:
250 ok queue id 249384396005
QUIT

我们登录126邮箱,看一下我们是否收到邮件:
【Java邮件开发】5.编写一个JavaMail发送邮件的程序
发现邮件成功投递到我们的126测试邮箱!

至此,我们的入门级JavaMail发送邮件的程序就编写完毕了。