JavaWeb实现邮件发送功能
基于JavaWeb的邮件发送功能(多附件),供大家参考,具体内容如下
本次学习主要目的是为了测试由QQ邮箱发送到任意一个有效邮箱的功能实现,附带多个附件。学习者可以借鉴其他邮箱的格式,梳理一下要写的内容。项目把文件内容放到了MimeMessage邮件对象里,其中包含了如发件人、收件人、抄送人、邮件主题、邮件内容、邮件时间和邮件附件等一些内容。
项目中遇到的问题:
1、在执行到Filefile=newFile(“D:\Chat_Software\sky.JPG”);时出现错误,之前写的时xlsx文件,测试期间可以对.xls,jpg,文本,.doc文件进行发送。发送xlsx文件时出现报错。
问题解决方案:
.xls文件扩展名对应的是MicrosoftOfficeEXCEL2003及以前的版本。
.xlsx文件扩展名对应的是MicrosoftOfficeEXCEL2007及后期的版本。
有可能时你下载的mai不是1.6以上版本的,建议下载1.6以上版本的mail
2、在执行到message.saveChanges();方法报错无法进行保存设置,也有可能时你的mail版本较低造成的。
在书写Filefile=newFile();时注意修改正确的路径,也可以写在form表单里用file进行传值,主题和内容也写在了方法里因人而异如果其他需求可以需改参数进行传值。
本次用到的主要jar包如下:
- javax.mail-1.6.0.jar
- activation.jar
代码如下:
EmailSendController.java
packagecom.yang.controller;
importjavax.servlet.http.HttpServletRequest;
importorg.springframework.stereotype.Controller;
importorg.springframework.web.bind.annotation.RequestMapping;
importorg.springframework.web.bind.annotation.ResponseBody;
importcom.yang.util.Email_Send_Util;
@Controller
@RequestMapping("/email")
publicclassEmailSendController{
@RequestMapping(value="/send.do")
@ResponseBody
publicbooleanimpotr(HttpServletRequestrequest){
StringtoMail=request.getParameter("toMail");
StringmyMail=request.getParameter("myMail");
StringuserPwd=request.getParameter("userPwd");
System.out.println(toMail+myMail+userPwd);
booleanbool=Email_Send_Util.send(toMail,myMail,userPwd);
returnbool;
}
}
Authentication.java
packagecom.yang.util;
importjavax.mail.Authenticator;
importjavax.mail.PasswordAuthentication;
publicclassAuthenticationextendsAuthenticator{
Stringusername=null;
Stringpassword=null;
publicAuthentication(){
}
publicAuthentication(Stringusername,Stringpassword){
this.username=username;
this.password=password;
}
protectedPasswordAuthenticationgetPasswordAuthentication(){
PasswordAuthenticationpa=newPasswordAuthentication(username,password);
returnpa;
}
}
CreateMimeMessage.java
packagecom.yang.util;
importjava.io.File;
importjava.util.Date;
importjavax.activation.DataHandler;
importjavax.activation.FileDataSource;
importjavax.mail.Message.RecipientType;
importjavax.mail.Address;
importjavax.mail.Message;
importjavax.mail.Session;
importjavax.mail.internet.InternetAddress;
importjavax.mail.internet.MimeBodyPart;
importjavax.mail.internet.MimeMessage;
importjavax.mail.internet.MimeMultipart;
importjavax.mail.internet.MimeUtility;
/**
*创建一封复杂邮件(文本+图片+附件)
*/
publicclassCreateMimeMessage{
publicstaticMimeMessagecreateMimeMessage(Sessionsession,StringmyMail,StringtoMail)throwsException{
//1.创建邮件对象
MimeMessagemessage=newMimeMessage(session);
//2.From:发件人
message.setFrom(newInternetAddress(myMail,"我的测试邮件_发件人昵称","UTF-8"));
//3.To:收件人(可以增加多个收件人、抄送、密送)
message.addRecipient(RecipientType.TO,newInternetAddress(toMail,"我的测试邮件_收件人昵称","UTF-8"));
//4.Subject:邮件主题
message.setSubject("TEST邮件主题(文本+图片+附件)","UTF-8");
//抄送人
AddressccAddress=newInternetAddress("*********@qq.com","我的测试邮件_抄送人昵称","UTF-8");
message.addRecipient(Message.RecipientType.CC,ccAddress);
/*
*下面是邮件内容的创建:
*/
//5.创建图片“节点”
MimeBodyPartimage=newMimeBodyPart();
Filefile=newFile("D:\\Chat_Software\\sky.JPG");
DataHandlerdh=newDataHandler(newFileDataSource(file));//读取本地文件
image.setDataHandler(dh);//将图片数据添加到“节点”
//image.setContentID("image_fairy_tail");//为“节点”设置一个唯一编号(在文本“节点”将引用该ID)
image.setFileName(MimeUtility.encodeText(file.getName()));
//6.创建文本“节点”
MimeBodyParttext=newMimeBodyPart();
//text.setContent("这是一张图片
测试图片
","text/html;charset=UTF-8");
text.setContent("这是一张图片
测试图片","text/html;charset=UTF-8");
//7.(文本+图片)设置文本和图片“节点”的关系(将文本和图片“节点”合成一个混合“节点”)
MimeMultipartmm_text_image=newMimeMultipart();
mm_text_image.addBodyPart(text);
mm_text_image.addBodyPart(image);
mm_text_image.setSubType("related");//关联关系
//8.将文本+图片的混合“节点”封装成一个普通“节点”
//最终添加到邮件的Content是由多个BodyPart组成的Multipart,所以我们需要的是BodyPart,
//上面的mm_text_image并非BodyPart,所有要把mm_text_image封装成一个BodyPart
MimeBodyParttext_image=newMimeBodyPart();
text_image.setContent(mm_text_image);
//9.创建附件“节点”
MimeBodyPartattachment=newMimeBodyPart();
Filefile2=newFile("E:\\boHaiBank\\Test\\test.xlsx");
DataHandlerdh2=newDataHandler(newFileDataSource(file2));//读取本地文件
attachment.setDataHandler(dh2);//将附件数据添加到“节点”
attachment.setFileName(MimeUtility.encodeText(dh2.getName()));//设置附件的文件名
//10.设置(文本+图片)和附件的关系(合成一个大的混合“节点”/Multipart)
MimeMultipartmm=newMimeMultipart();
mm.addBodyPart(text_image);
mm.addBodyPart(attachment);//如果有多个附件,可以创建多个多次添加
mm.setSubType("mixed");//混合关系
//11.设置整个邮件的关系(将最终的混合“节点”作为邮件的内容添加到邮件对象)
message.setContent(mm);
//12.设置发件时间
message.setSentDate(newDate());
//13.保存上面的所有设置
message.saveChanges();
returnmessage;
}
}
Email_Send_Util.java
packagecom.yang.util;
importjava.util.Properties;
importjavax.mail.Authenticator;
importjavax.mail.Session;
importjavax.mail.Transport;
importjavax.mail.internet.MimeMessage;
publicclassEmail_Send_Util{
publicstaticbooleansend(StringtoMail,StringmyMail,StringuserPwd){
//QQ邮箱发件的服务器和端口
Propertiesprops=newProperties();
props.put("mail.transport.protocol","SMTP");//设置发送邮件使用的协议
props.put("mail.smtp.host","smtp.qq.com");//指定邮件发送服务器服务器"smtp.qq.com"
props.put("mail.smtp.port","25");
props.put("mail.smtp.auth","true");//设置需要身份验证(不验证会不通过)
Authenticatorauthentication=newAuthentication(myMail,"你的邮箱授权码");
Sessionsession=Session.getDefaultInstance(props,authentication);
MimeMessagemessage;
try{
message=CreateMimeMessage.createMimeMessage(session,myMail,toMail);
//获取发送方对象
Transporttransport=session.getTransport("smtp");
//连接邮件服务器,链接您的QQ邮箱,用户名(可以不用带后缀)、密码
transport.connect(myMail,userPwd);
//发送邮件
//第一个参数:邮件的消息体
//第二个参数:邮件所有的接收人/抄送人
transport.sendMessage(message,message.getAllRecipients());
transport.close();
returntrue;
}catch(Exceptione){
e.printStackTrace();
returnfalse;
}
}
}
测试发送邮箱的jsp页面
<%@pagelanguage="java"contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%> <% Stringpath=request.getContextPath(); StringbasePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort() +path+"/"; %>邮件发送 邮件发送 Email 收件人 邮件发送人 密码 functionemailsend(){ $.ajax({ url:"email/send.do", type:"POST", data:$("#login_form").serialize(), beforeSend:function(){ console.log("正在进行,请稍候"); }, success:function(e){ if(e==true){ alert("发送成功"); }else{ alert("发送失败"); } } }); }
发送成功后,收件人的邮件
所需的jar包可以在这个链接里下载,其中还有定时发送邮件所需的jar包:mail.jar
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。