本文作者具有著作权,转载前倾注明来源:留在青山的博客
在我的很久之前的一篇博文里,我使用简单的代码 实现了java发送126邮箱邮件的功能,但是今天我自己注册了一个个性化的域名,我想通过我自己的域名邮箱来发送邮件,仍旧使用以前的那个代码发现始终报错,于是 ,进过各种尝试,终于解决了java发送163个性化域名企业邮箱邮件的功能,下面直接上代码:
封装要发送的邮件实体类代码:packagecom.blog.test.mail;
importjava.util.Properties;
/**
*发送邮件需要使用的基本信息对象类
*@authorguopengfei
*
*留在青山的博客(https://www.blog-/liuzaiqingshan/home)
*
*/
publicclassMailSenderInfo{
//发送邮件的服务器的IP和端口
privateStringmailServerHost;
privateStringmailServerPort="25";
//邮件发送者的地址
privateStringfromAddress;
//邮件接收者的地址
privateStringtoAddress;
//登陆邮件发送服务器的用户名和密码
privateStringuserName;
privateStringpassword;
//是否需要身份验证
privatebooleanvalidate=false;
//邮件主题
privateStringsubject;
//邮件的文本内容
privateStringcontent;
//邮件附件的文件名
privateString[]attachFileNames;
/**
*获得邮件会话属性
*/
publicPropertiesgetProperties(){
Propertiesp=newProperties();
p.put("mail.smtp.host",this.mailServerHost);
p.put("mail.smtp.port",this.mailServerPort);
p.put("mail.smtp.auth",validate?"true":"false");
returnp;
}
publicStringgetMailServerHost(){
returnmailServerHost;
}
publicvoidsetMailServerHost(StringmailServerHost){
this.mailServerHost=mailServerHost;
}
publicStringgetMailServerPort(){
returnmailServerPort;
}
publicvoidsetMailServerPort(StringmailServerPort){
this.mailServerPort=mailServerPort;
}
publicbooleanisValidate(){
returnvalidate;
}
publicvoidsetValidate(booleanvalidate){
this.validate=validate;
}
publicString[]getAttachFileNames(){
returnattachFileNames;
}
publicvoidsetAttachFileNames(String[]fileNames){
this.attachFileNames=fileNames;
}
publicStringgetFromAddress(){
returnfromAddress;
}
publicvoidsetFromAddress(StringfromAddress){
this.fromAddress=fromAddress;
}
publicStringgetPassword(){
returnpassword;
}
publicvoidsetPassword(Stringpassword){
this.password=password;
}
publicStringgetToAddress(){
returntoAddress;
}
publicvoidsetToAddress(StringtoAddress){
this.toAddress=toAddress;
}
publicStringgetUserName(){
returnuserName;
}
publicvoidsetUserName(StringuserName){
this.userName=userName;
}
publicStringgetSubject(){
returnsubject;
}
publicvoidsetSubject(Stringsubject){
this.subject=subject;
}
publicStringgetContent(){
returncontent;
}
publicvoidsetContent(StringtextContent){
this.content=textContent;
}
}
身份验证时封装的类信息:packagecom.blog.test.mail;
importjavax.mail.*;
/**
*
*@authorguopengfei
*
*/
publicclassMyAuthenticatorextendsAuthenticator{
StringuserName=null;
Stringpassword=null;
publicMyAuthenticator(){
}
publicMyAuthenticator(Stringusername,Stringpassword){
this.userName=username;
this.password=password;
}
protectedPasswordAuthenticationgetPasswordAuthentication(){
returnnewPasswordAuthentication(userName,password);
}
}
实际发送类代码:packagecom.blog.test.mail;
importjava.util.Date;
importjava.util.Properties;
importjavax.mail.Address;
importjavax.mail.BodyPart;
importjavax.mail.Message;
importjavax.mail.MessagingException;
importjavax.mail.Multipart;
importjavax.mail.Session;
importjavax.mail.Transport;
importjavax.mail.internet.InternetAddress;
importjavax.mail.internet.MimeBodyPart;
importjavax.mail.internet.MimeMessage;
importjavax.mail.internet.MimeMultipart;
/**
*邮件(可以携带附件的邮件)发送器
*
*@authorguopengfei
*留在青山的博客(https://www.blog-/liuzaiqingshan/home)
*
*/
publicclassSimpleMailSender{
/**
*以文本格式发送邮件
*
*@parammailInfo
*待发送的邮件的信息
*/
publicbooleansendTextMail(MailSenderInfomailInfo){
//判断是否需要身份认证
MyAuthenticatorauthenticator=null;
Propertiespro=mailInfo.getProperties();
if(mailInfo.isValidate()){
//如果需要身份认证,则创建一个密码验证器
authenticator=newMyAuthenticator(mailInfo.getUserName(),
mailInfo.getPassword());
}
//根据邮件会话属性和密码验证器构造一个发送邮件的session
SessionsendMailSession=Session
.getDefaultInstance(pro,authenticator);
try{
//根据session创建一个邮件消息
MessagemailMessage=newMimeMessage(sendMailSession);
//创建邮件发送者地址
Addressfrom=newInternetAddress(mailInfo.getFromAddress());
//设置邮件消息的发送者
mailMessage.setFrom(from);
//创建邮件的接收者地址,并设置到邮件消息中
Addressto=newInternetAddress(mailInfo.getToAddress());
mailMessage.setRecipient(Message.RecipientType.TO,to);
//设置邮件消息的主题
mailMessage.setSubject(mailInfo.getSubject());
//设置邮件消息发送的时间
mailMessage.setSentDate(newDate());
//设置邮件消息的主要内容
StringmailContent=mailInfo.getContent();
mailMessage.setText(mailContent);
//发送邮件
Transport.send(mailMessage);
returntrue;
}catch(MessagingExceptionex){
ex.printStackTrace();
}
returnfalse;
}
/**
*以HTML格式发送邮件
*
*@parammailInfo
*待发送的邮件信息
*/
publicbooleansendHtmlMail(MailSenderInfomailInfo){
//判断是否需要身份认证
MyAuthenticatorauthenticator=null;
Propertiespro=mailInfo.getProperties();
//如果需要身份认证,则创建一个密码验证器
if(mailInfo.isValidate()){
authenticator=newMyAuthenticator(mailInfo.getUserName(),
mailInfo.getPassword());
}
//根据邮件会话属性和密码验证器构造一个发送邮件的session
SessionsendMailSession=Session
.getDefaultInstance(pro,authenticator);
try{
//根据session创建一个邮件消息
MessagemailMessage=newMimeMessage(sendMailSession);
//创建邮件发送者地址
Addressfrom=newInternetAddress(mailInfo.getFromAddress());
//设置邮件消息的发送者
mailMessage.setFrom(from);
//创建邮件的接收者地址,并设置到邮件消息中
Addressto=newInternetAddress(mailInfo.getToAddress());
//Message.RecipientType.TO属性表示接收者的类型为TO
mailMessage.setRecipient(Message.RecipientType.TO,to);
//设置邮件消息的主题
mailMessage.setSubject(mailInfo.getSubject());
//设置邮件消息发送的时间
mailMessage.setSentDate(newDate());
//MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象
MultipartmainPart=newMimeMultipart();
//创建一个包含HTML内容的MimeBodyPart
BodyParthtml=newMimeBodyPart();
//设置HTML内容
html.setContent(mailInfo.getContent(),"text/html;charset=utf-8");
mainPart.addBodyPart(html);
//设置信件的附件(用本地上的文件作为附件)
//html=newMimeBodyPart();
//FileDataSourcefds=newFileDataSource("D:\\...javamail.doc");
//DataHandlerdh=newDataHandler(fds);
//html.setFileName("javamail.doc");
//html.setDataHandler(dh);
//mainPart.addBodyPart(html);
//将MiniMultipart对象设置为邮件内容
mailMessage.setContent(mainPart);
mailMessage.saveChanges();
//发送邮件
Transport.send(mailMessage);
returntrue;
}catch(MessagingExceptionex){
ex.printStackTrace();
}
returnfalse;
}
}
测试发送类,作者实体测试时使用的是网易中的个性化域名邮箱@blog-,并成功的发送邮件:packagecom.blog.test;
importcom.blog.test.mail.MailSenderInfo;
importcom.blog.test.mail.SimpleMailSender;
publicclassTestSendEmail{//163邮箱
publicstaticvoidmain(String[]args){
//这个类主要是设置邮件
MailSenderInfomailInfo=newMailSenderInfo();
mailInfo.setMailServerHost("smtp.");//邮箱服务器名,不要改变
mailInfo.setMailServerPort("25");//端口,不是ssl发送邮件,就不要该这个端口
mailInfo.setValidate(true);
mailInfo.setUserName("***@blog-");//实际发送者
mailInfo.setPassword("****");//您的邮箱密码
mailInfo.setFromAddress("****@blog-");//设置发送人邮箱地址
mailInfo.setToAddress("****@");//设置接受者邮箱地址
mailInfo.setSubject("系统邮件-找回密码");
mailInfo.setContent("
您的邮箱密码为:
");//这个类主要来发送邮件
SimpleMailSendersms=newSimpleMailSender();
sms.sendTextMail(mailInfo);//发送文体格式
sms.sendHtmlMail(mailInfo);//发送html格式
}
}
通过以上代码的完善,成功的解决了以前我的前一篇文章只能发送126邮箱邮件的问题,这端代码能够实现发送163企业邮箱、腾讯企业邮箱、腾讯邮箱等邮箱的邮件。