java实现163邮箱发送邮件到qq邮箱成功案例
下载和上传附件、发送短信和发送邮件,都算是程序中很常用的功能,之前记录了文件的上传和下载还有发送短信,由于最近比较忙,邮件发送的功能就没有时间去弄,现在终于成功以163邮箱发送邮件到qq邮箱,以下是相关代码,具体解释可以参考代码中注释:
packagetest;
importjava.util.ArrayList;
importjava.util.Date;
importjava.util.List;
importjava.util.Properties;
importjava.util.regex.Matcher;
importjava.util.regex.Pattern;
importjavax.mail.Address;
importjavax.mail.Authenticator;
importjavax.mail.BodyPart;
importjavax.mail.Message;
importjavax.mail.PasswordAuthentication;
importjavax.mail.Session;
importjavax.mail.Transport;
importjavax.mail.internet.InternetAddress;
importjavax.mail.internet.MimeBodyPart;
importjavax.mail.internet.MimeMessage;
importjavax.mail.internet.MimeMultipart;
importcom.sun.mail.util.MailSSLSocketFactory;
///**
//*
//*@authortuzongxun123
//*@Description邮件发送测试类
//*/
publicclasssendMailTest{
publicstaticvoidmain(String[]args)throwsException{
//配置信息
Propertiespro=newProperties();
pro.put("mail.smtp.host","smtp.163.com");
pro.put("mail.smtp.auth","true");
//SSL加密
MailSSLSocketFactorysf=null;
sf=newMailSSLSocketFactory();
//设置信任所有的主机
sf.setTrustAllHosts(true);
pro.put("mail.smtp.ssl.enable","true");
pro.put("mail.smtp.ssl.socketFactory",sf);
//根据邮件的会话属性构造一个发送邮件的Session,这里需要注意的是用户名那里不能加后缀,否则便不是用户名了
//还需要注意的是,这里的密码不是正常使用邮箱的登陆密码,而是客户端生成的另一个专门的授权码
MailAuthenticatorauthenticator=newMailAuthenticator("tuzongxun123",
"客户端授权码");
Sessionsession=Session.getInstance(pro,authenticator);
//根据Session构建邮件信息
Messagemessage=newMimeMessage(session);
//创建邮件发送者地址
Addressfrom=newInternetAddress("tuzongxun123@163.com");
//设置邮件消息的发送者
message.setFrom(from);
//验证收件人邮箱地址
List<String>toAddressList=newArrayList<>();
toAddressList.add("1160569243@qq.com");
StringBufferbuffer=newStringBuffer();
if(!toAddressList.isEmpty()){
StringregEx="^([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$";
Patternp=Pattern.compile(regEx);
for(inti=0;i<toAddressList.size();i++){
Matchermatch=p.matcher(toAddressList.get(i));
if(match.matches()){
buffer.append(toAddressList.get(i));
if(i<toAddressList.size()-1){
buffer.append(",");
}
}
}
}
StringtoAddress=buffer.toString();
if(!toAddress.isEmpty()){
//创建邮件的接收者地址
Address[]to=InternetAddress.parse(toAddress);
//设置邮件接收人地址
message.setRecipients(Message.RecipientType.TO,to);
//邮件主题
//message.setSubject("java邮件测试");
message.setSubject("为什么错了");
//邮件容器
MimeMultipartmimeMultiPart=newMimeMultipart();
//设置HTML
BodyPartbodyPart=newMimeBodyPart();
//邮件内容
//StringhtmlText="java邮件测试111";
StringhtmlText="为什么错了";
bodyPart.setContent(htmlText,"text/html;charset=utf-8");
mimeMultiPart.addBodyPart(bodyPart);
//添加附件
List<String>fileAddressList=newArrayList<String>();
fileAddressList
.add("C:\\Users\\tuzongxun123\\Desktop\\新建MicrosoftOfficeWord文档.docx");
if(fileAddressList!=null){
BodyPartattchPart=null;
for(inti=0;i<fileAddressList.size();i++){
if(!fileAddressList.get(i).isEmpty()){
attchPart=newMimeBodyPart();
//附件数据源
DataSourcesource=newFileDataSource(
fileAddressList.get(i));
//将附件数据源添加到邮件体
attchPart.setDataHandler(newDataHandler(source));
//设置附件名称为原文件名
attchPart.setFileName(MimeUtility.encodeText(source
.getName()));
mimeMultiPart.addBodyPart(attchPart);
}
}
}
message.setContent(mimeMultiPart);
message.setSentDate(newDate());
//保存邮件
message.saveChanges();
//发送邮件
Transport.send(message);
}
}
}
classMailAuthenticatorextendsAuthenticator{
/**
*用户名
*/
privateStringusername;
/**
*密码
*/
privateStringpassword;
/**
*创建一个新的实例MailAuthenticator.
*
*@paramusername
*@parampassword
*/
publicMailAuthenticator(Stringusername,Stringpassword){
this.username=username;
this.password=password;
}
publicStringgetPassword(){
returnpassword;
}
@Override
protectedPasswordAuthenticationgetPasswordAuthentication(){
returnnewPasswordAuthentication(username,password);
}
publicStringgetUsername(){
returnusername;
}
publicvoidsetPassword(Stringpassword){
this.password=password;
}
publicvoidsetUsername(Stringusername){
this.username=username;
}
}
注:我有个同事使用我这个代码更换为他的账号和客户端授权码后,一运行就报错,然后重置了一下邮箱的客户端授权码后,错误便消失了。
以上就是本文的全部内容,希望对大家学习java程序设计有所帮助。