在借鉴别人的javamail创建博客中,在编写代码时候遇到的一些问题,在这里分析一下。
1.使用STS创建mvn项目,创建的具体过程就不说了,主要是有关pom.xml的配置。写javamail时,mvn项目需要添加有关依赖:
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.5.0-b01</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
但是会出现引入依赖的问题,需要在pom.xml文件中添加一下操作:
<!-- mvn项目加载jar包的时候会出现 jar包加载不进去的问题, 原因缺少这个东西-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.1.RELEASE</version>
</parent>
之后通过依赖引入的jar包,才可以添加到mvn中。
2.之后就是主要的发送邮件的代码,代码来源代码来源:https://blog.csdn.net/xuemengrui12/article/details/78530594
package com.message;
import java.util.Date;
import java.util.Properties;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
/**
* @Description 发送邮件 来源于博客爆米花9958
* @Creat date 2018-9-30 19:23
* @author yulin
* @version 0.0.1-SNAPSHOT
* @ruturn message
*/
public class SendMail {
public static String myEmailAccount = "发送人账号";
public static String myEmailPassword = "发送人密码";//不能输入自己的真实密码,应该是授权码。
public static String myEmailSMTPHost = "smtp.qq.com"; //QQ的SMTP服务器,如果是其他的邮箱也可以
public static String receiveMailAccount = "收件人账号";
public static void main(String[] args) throws Exception {
Properties props = new Properties();
props.setProperty("mail.transport.protocol", "smtp");
props.setProperty("mail.smtp.host", myEmailSMTPHost);
props.setProperty("mail.smtp.auth", "true");
final String smtpPort = "465";
props.setProperty("mail.smtp.port", smtpPort);
props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.setProperty("mail.smtp.socketFactory.fallback", "false");
props.setProperty("mail.smtp.socketFactory.port", smtpPort);
Session session = Session.getInstance(props);
session.setDebug(true);
MimeMessage message = createMimeMessage(session, myEmailAccount, receiveMailAccount);
Transport transport = session.getTransport();
transport.connect(myEmailAccount, myEmailPassword);
transport.sendMessage(message, message.getAllRecipients());
transport.close();
}
/**
* 创建一封只包含文本的简单邮件
*
* @param session 和服务器交互的会话
* @param sendMail 发件人邮箱
* @param receiveMail 收件人邮箱
* @return
* @throws Exception
*/
public static MimeMessage createMimeMessage(Session session, String sendMail, String receiveMail) throws Exception {
// 1. 创建一封邮件
MimeMessage message = new MimeMessage(session);
// 2. From: 发件人 昵称随意
message.setFrom(new InternetAddress(sendMail, "昵称", "UTF-8"));
// 3. To: 收件人(可以增加多个收件人、抄送、密送) 昵称随意
message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(receiveMail, "昵称", "UTF-8"));
// 4. Subject: 邮件主题
message.setSubject("java代码编写的", "UTF-8");
// 5. Content: 邮件正文(可以使用html标签)
message.setContent("你好,我的小邮件给你发送过去了啊~", "text/html;charset=UTF-8");
// 6. 设置发件时间
message.setSentDate(new Date());
// 7. 保存设置
message.saveChanges();
return message;
}
}
3.注意事项:发送人的账号密码,不能使用自己本来的账号密码,要使用授权码,QQ邮箱的授权码在官方网站上面有说明,可以去参考。如果使用自己本身的账号密码的话会出现Exception in thread "main" javax.mail.AuthenticationFailedException: 535 Error问题。
4.发送成功之后在控制台会显示出:
DEBUG: setDebug: JavaMail version 1.6.2
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Oracle]
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: trying to connect to host "smtp.qq.com", port 465, isSSL false
220 smtp.qq.com Esmtp QQ Mail Server
DEBUG SMTP: connected to host "smtp.qq.com", port: 465
EHLO DESKTOP-U4C6AI2
250-smtp.qq.com
250-PIPELINING
250-SIZE 73400320
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN
250-MAILCOMPRESS
250 8BITMIME
DEBUG SMTP: Found extension "PIPELINING", arg ""
DEBUG SMTP: Found extension "SIZE", arg "73400320"
DEBUG SMTP: Found extension "AUTH", arg "LOGIN PLAIN"
DEBUG SMTP: Found extension "AUTH=LOGIN", arg ""
DEBUG SMTP: Found extension "MAILCOMPRESS", arg ""
DEBUG SMTP: Found extension "8BITMIME", arg ""
DEBUG SMTP: protocolConnect login, host=smtp.qq.com, user=2376539013@qq.com, password=<non-null>
DEBUG SMTP: Attempt to authenticate using mechanisms: LOGIN PLAIN DIGEST-MD5 NTLM XOAUTH2
DEBUG SMTP: Using mechanism LOGIN
DEBUG SMTP: AUTH LOGIN command trace suppressed
DEBUG SMTP: AUTH LOGIN succeeded
DEBUG SMTP: use8bit false
MAIL FROM:<2376539013@qq.com>
250 Ok
RCPT TO:<3310056607@qq.com>
250 Ok
DEBUG SMTP: Verified Addresses
DEBUG SMTP: =?UTF-8?B?5oiR5bCP5Y+3?= <3310056607@qq.com>
DATA
354 End data with <CR><LF>.<CR><LF>
Date: Sun, 30 Sep 2018 20:12:04 +0800 (CST)
From: =?UTF-8?B?5oOz5Y676a2U6YO9?= <2376539013@qq.com>
To: =?UTF-8?B?5oiR5bCP5Y+3?= <3310056607@qq.com>
Message-ID: <653305407.0.1538309533529@DESKTOP-U4C6AI2>
Subject: =?UTF-8?B?amF2YeS7o+eggee8luWGmeeahA==?=
MIME-Version: 1.0
Content-Type: text/html;charset=UTF-8
Content-Transfer-Encoding: base64
6ICB5biI5L2g5aW977yM5oiR55qE5bCP6YKu5Lu257uZ5L2g5Y+R6YCB6L+H5Y675LqG5ZWKfg==
.
250 Ok: queued as
DEBUG SMTP: message successfully delivered to mail server
QUIT
221 Bye
6.希望我写到的这些注意问题会对你的电子邮件发送成功提供一些参考。