用Java发送邮件,首先要获取授权码,这里使用qq邮箱发送邮件给自己,所以要获取qq邮箱的授权码。
    首先添加maven依赖,

    1. <dependency>
    2. <groupId>javax.mail</groupId>
    3. <artifactId>mail</artifactId>
    4. <version>1.4</version>
    5. </dependency>

    代码写法基本是固定的。

    1. import java.security.Security;
    2. import java.util.Properties;
    3. import javax.mail.Authenticator;
    4. import javax.mail.Message;
    5. import javax.mail.PasswordAuthentication;
    6. import javax.mail.Session;
    7. import javax.mail.Transport;
    8. import javax.mail.internet.InternetAddress;
    9. import javax.mail.internet.MimeMessage;
    10. import com.sun.net.ssl.internal.ssl.Provider;
    11. public class MailClient{
    12. public static void main(String[] args){
    13. try{
    14. //设置SSL连接、邮件环境
    15. Security.addProvider(new Provider());
    16. final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
    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. //账户 授权码
    33. return new PasswordAuthentication("xxx@qq.com","xxxx");
    34. }
    35. });
    36. //建立邮件对象
    37. MimeMessage message = new MimeMessage(session);
    38. //设置邮件的发件人
    39. message.setFrom(new InternetAddress("xxxx@qq.com"));
    40. //设置邮件的收件人,可设置多个收件人用逗号隔开
    41. message.setRecipients(Message.RecipientType.TO,"xxxx@qq.com,xxx@163.com");
    42. //设置邮件的主题
    43. message.setSubject("通过javamail发出");
    44. //文本内容
    45. message.setContent("文本邮件测试","text/html;charset=UTF-8");
    46. message.saveChanges();
    47. //发送邮件
    48. Transport.send(message);
    49. }catch(Exception e){
    50. e.printStackTrace();
    51. }
    52. }
    53. }

    下面的代码复用性更好

    1. package com.youkeda.test.j3.c9;
    2. import com.sun.net.ssl.internal.ssl.Provider;
    3. import java.security.Security;
    4. import java.util.Properties;
    5. import javax.mail.Authenticator;
    6. import javax.mail.Message;
    7. import javax.mail.PasswordAuthentication;
    8. import javax.mail.Session;
    9. import javax.mail.Transport;
    10. import javax.mail.internet.InternetAddress;
    11. import javax.mail.internet.MimeMessage;
    12. public class Mail {
    13. private static final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
    14. private static Properties props = null;
    15. // TODO:发件人信箱
    16. private static final String FROM_MAIL = "xxxx@qq.com";
    17. // TODO:发件人信箱安全key即授权码
    18. private static final String FROM_MAIL_KEY = "";
    19. // TODO:收件人信箱 可多个
    20. private static final String TO_MAIL = "xxx@163.com";
    21. /**
    22. * 在构造函数中初始化相关的参数。这是固定用法。
    23. */
    24. public Mail() {
    25. // 设置SSL连接、邮件环境
    26. Security.addProvider(new Provider());
    27. props = System.getProperties();
    28. props.setProperty("mail.smtp.host", "smtp.qq.com");
    29. props.setProperty("mail.smtp.socketFactory.class", SSL_FACTORY);
    30. props.setProperty("mail.smtp.socketFactory.fallback", "false");
    31. props.setProperty("mail.smtp.port", "465");
    32. props.setProperty("mail.smtp.socketFactory.port", "465");
    33. props.setProperty("mail.smtp.auth", "true");
    34. }
    35. /**
    36. * 发送邮件
    37. * @param subject
    38. * @param content
    39. */
    40. public void sendMail(String subject, String content) {
    41. try {
    42. // 建立邮件会话
    43. Session session = Session.getDefaultInstance(props, new Authenticator() {
    44. // 身份认证
    45. protected PasswordAuthentication getPasswordAuthentication() {
    46. // 账户 授权码
    47. return new PasswordAuthentication(FROM_MAIL, FROM_MAIL_KEY);
    48. }
    49. });
    50. // 建立邮件对象
    51. MimeMessage message = new MimeMessage(session);
    52. // 设置邮件的发件人、收件人、主题
    53. // 附带发件人名字
    54. message.setFrom(new InternetAddress(FROM_MAIL));
    55. message.setRecipients(Message.RecipientType.TO, TO_MAIL);
    56. message.setSubject(subject);
    57. // 文本部分
    58. message.setContent(content, "text/html;charset=UTF-8");
    59. message.saveChanges();
    60. // 发送邮件
    61. Transport.send(message);
    62. } catch (Exception e) {
    63. e.printStackTrace();
    64. }
    65. }
    66. }