备注:本例子已QQ邮箱发送为例(邮件发送要用线程不然网站会很慢);
使用先邮箱设置:先开启邮箱 Pop3Smtp服务获取授权码
怎么获取授权码?
先进入设置-》帐户页面找到入口,按照以下流程操作。
依赖jar包:javax.mail 1.4.4
package external.email;
import java.security.GeneralSecurityException;
import java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.Message.RecipientType;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import com.sun.mail.util.MailSSLSocketFactory;
public class JavaEmailApi {
private static String SendEmailAccount ="[email protected]";
private static String Pop3SmtpKey ="xxxxxxxxxxx";
public static void SendEmail(String recipientAccount,String subject,String content){
//跟smtp服务器建立一个连接
Properties p = new Properties();
//设置邮件服务器主机名
p.setProperty("mail.host", "smtp.qq.com");//指定邮件服务器,默认端口号25
//发送服务器需要身份证验证
p.setProperty("mail.smtp.auth", "true");//要采用指定用户名密码的方式去认证
//发送邮件协议名称
p.setProperty("mail.transport.protocol", "smtp");
//开启SSL加密,否则会失败
MailSSLSocketFactory sf = null;
try {
sf = new MailSSLSocketFactory();
} catch (GeneralSecurityException e1) {
e1.printStackTrace();
}
sf.setTrustAllHosts(true);
p.put("mail.smtp.ssl.enable", "true");
p.put("mail.smtp.ssl.socketFactory", sf);
//开启debug调试,以便在控制台查看
// session.setDebug(true);也可以这样设置
// p.setProperty("mail.debug", "true");
//创建session
Session session = Session.getDefaultInstance(p, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
//用户名可以用QQ账号也可以用邮箱的别名
PasswordAuthentication pa = new PasswordAuthentication(SendEmailAccount, Pop3SmtpKey);
//后面的字符是授权码,用qq密码不行!!
return pa;
}
});
//session.setDebug(true);//设置打开调试状态
try {
//声明一个Message对象(代表一封邮件),从session中创建
MimeMessage msg = new MimeMessage(session);
//邮件信息封装
// 1发件人
msg.setFrom(new InternetAddress(SendEmailAccount));
// 2收件人
msg.setRecipient(RecipientType.TO, new InternetAddress(recipientAccount));
// 3邮件内容:主题、内容
msg.setSubject(subject);
// StringBuilder是线程不安全的,但是速度快,这里因为只会有这个线程来访问,所以可以用这个
/*StringBuilder sbd = new StringBuilder();
sbd.append("[email protected]
欢迎!请确认此邮件地址以激活您的账号。
");
sbd.append("
sbd.append(">立即激活
");
sbd.append("或者点击下面链接:
");
sbd.append("http://192.168.1.102:8080/myMailWeb/ActiveServlet?acode=111111
");
sbd.append("这是一封自动发送的邮件;如果您并未要求但收到这封信件,您不需要进行任何操作。");
//msg.setContent(sbd.toString(), "text/html;charset=utf-8");//发html格式的文本
msg.setContent(content, "text/html;charset=utf-8");//发html格式的文本
*///发送动作
Transport.send(msg);
//System.out.println("给[email protected]发送邮件成功。");
} catch (AddressException e) {
e.printStackTrace();
} catch (MessagingException e) {
e.printStackTrace();
}
}
}