7.1 SMTP
SMTP是一个简单的基于文本的邮件协议,在这个协议上我们可以指定一条邮件消息和一个或多个接受者,然后进行邮件输出。SMTP协议再加上一个服务器地址就组成一个邮件访问方式。
比如:
- QQ邮箱:smtp.qq.com
- 163邮箱:smtp.163.com
通过地址和协议,我们便具有发送邮件的基础通道。使用Java或其他编程语言,可以使用SMTP完成邮件的发送,不必打开网页登录邮箱发送邮件了。
7.2 JavaMail邮件发送
SMTP应用
这一节我们将实现如何使用代码,利用自己的QQ邮箱发送邮件。在上一节中,我们大致了解的SMTP协议,在使用QQ邮箱发送邮件时,我们需要先进入QQ邮箱开启SMTP支持。
开启QQ邮箱设置:
1.打开QQ邮箱设置
2.在QQ邮箱头部找到邮箱设置,切换到账户下面,如图
3.往下边翻,开启和SMTP有关的服务。如图前两项
4.开启过程中可能会有各种验证,最终会得到授权码
注意:1.授权码没有空格,只是QQ邮箱为了分段显示而已。
2.授权码不是邮箱的登录密码,不要混淆。
JavaMail
在Java中我们可以调用JavaMail调用和接受邮件,我们首先配置maven依赖,如pom文件加入
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4</version>
</dependency>
然后 ,如下发送代码
import java.security.Security; import java.util.Properties; import javax.mail.Authenticator; import javax.mail.Message; import javax.mail.PasswordAuthentication; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; public class MailClient { public static void main(String[] args) { try { final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory"; //配置邮箱信息 Properties props = System.getProperties(); //邮件服务器 props.setProperty("mail.smtp.host", "smtp.qq.com"); props.setProperty("mail.smtp.socketFactory.class", SSL_FACTORY); props.setProperty("mail.smtp.socketFactory.fallback", "false"); //邮件服务器端口 props.setProperty("mail.smtp.port", "465"); props.setProperty("mail.smtp.socketFactory.port", "465"); //鉴权信息 props.setProperty("mail.smtp.auth", "true"); //建立邮件会话 Session session = Session.getDefaultInstance(props, new Authenticator() { //身份认证 protected PasswordAuthentication getPasswordAuthentication() { //1.账户 授权码 return new PasswordAuthentication("xxxxxxx@qq.com", "xxxx"); } }); //建立邮件对象 MimeMessage message = new MimeMessage(session); //设置邮件的发件人 message.setFrom(new InternetAddress("xxxxxxx@qq.com")); //2.设置邮件的收件人 message.setRecipients(Message.RecipientType.TO, "xxxxxxx@qq.com"); //设置邮件的主题 message.setSubject("通过javamail发出!!!"); //文本部分 message.setContent("文本邮件测试", "text/html;charset=UTF-8"); message.saveChanges(); //发送邮件 Transport.send(message); } catch (Exception e) { e.printStackTrace(); } } }
例:用自己的QQ邮箱给自己发一封邮件,注意一下约定条件
1.设置邮件主题为:HELLO
2.设置邮件主题内容是:HELLOWORLD
3.发送邮件完成后,在console打印:“Send complete”信息
先在pom.xml文件中添加依赖库。
然后完成Mail类
1 package com.youkeda.email; 2 import java.security.Security; 3 import java.util.Properties; 4 import javax.mail.Authenticator; 5 import javax.mail.Message; 6 import javax.mail.PasswordAuthentication; 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 public static void main(String[] args) { 14 try { 15 final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory"; 16 17 //配置邮箱信息 18 Properties props = System.getProperties(); 19 //邮件服务器 20 props.setProperty("mail.smtp.host", "smtp.qq.com"); 21 props.setProperty("mail.smtp.socketFactory.class", SSL_FACTORY); 22 props.setProperty("mail.smtp.socketFactory.fallback", "false"); 23 //邮件服务器端口 24 props.setProperty("mail.smtp.port", "465"); 25 props.setProperty("mail.smtp.socketFactory.port", "465"); 26 //鉴权信息 27 props.setProperty("mail.smtp.auth", "true"); 28 //建立邮件会话 29 Session session = Session.getDefaultInstance(props, new Authenticator() { 30 //身份认证 31 protected PasswordAuthentication getPasswordAuthentication() { 32 //1.账户 授权码 33 return new PasswordAuthentication("1026509698@qq.com", "rdzdvorugfsxbebe"); 34 } 35 }); 36 //建立邮件对象 37 MimeMessage message = new MimeMessage(session); 38 //设置邮件的发件人 39 message.setFrom(new InternetAddress("1026509698@qq.com")); 40 //2.设置邮件的收件人 41 message.setRecipients(Message.RecipientType.TO, "1026509698@qq.com"); 42 //设置邮件的主题 43 message.setSubject("HELLO"); 44 //文本部分 45 message.setContent("HELLOWORLD", "text/html;charset=UTF-8"); 46 message.saveChanges(); 47 //发送邮件 48 Transport.send(message); 49 System.out.println("Send complete"); 50 } catch (Exception e) { 51 e.printStackTrace(); 52 } 53 } 54 }
不一会儿,就收到了自己发来的邮件,感觉不错。