导航:首页 > 编程语言 > javamail发送带附件的邮件

javamail发送带附件的邮件

发布时间:2025-05-03 10:08:53

㈠ SpringBoot使用javaMailSender发送邮件

在Spring Boot项目中使用JavaMailSender进行邮件发送已成为一种高效便捷的方式。随着技术发展,早期使用JavaMail API编写邮件发送代码变得相对繁琐。为解决这一问题,Spring框架推出了JavaMailSender接口,进一步简化了邮件发送过程。在此基础上,Spring Boot通过引入spring-boot-starter-mail依赖包,为开发者提供了一站式的邮件发送解决方案。

JavaMail是由Sun定义的用于发送和接收电子邮件的API,广泛适用于不同厂商的实现。虽然它未被包含在JDK中,但却是Java EE的重要组成部分。JavaMailSender底层基于JavaMail jar包,实现邮件发送功能。

邮件通信协议分为SMTP、POP3和IMAP三种。对于加密传输,有SMTPS、POP3S和IMAPS等协议,确保数据安全。此外,JavaMail服务提供程序需要配合JAF(JavaBeansActivationFramework)处理非文本邮件内容,包括MIME(多用途互联网邮件扩展)、URL页面和文件附件等。

在Spring Boot中,发送邮件流程可概括为以下几个步骤:

1. **添加依赖**:在pom.xml文件中引入spring-boot-starter-mail依赖。

2. **配置参数**:在application.properties(或application.yml)文件中加入相应的配置信息,例如邮箱服务器地址、端口号、用户名、密码等。

示例配置(以网易邮箱为例):

mail.smtp.host=smtp.163.com
mail.smtp.auth=true
mail.smtp.starttls.enable=true
mail.debug=true

端口号默认为25,根据实际情况调整。

3. **编写邮件服务接口**:定义一个接口并实现发送邮件功能。

4. **封装在Controller层**:在Controller层中调用邮件服务接口,完成邮件发送。

至此,发送邮件的流程完整结束。启动项目并调用相关接口,即可成功发送邮件。

Spring Boot的starter模块提供了自动化配置,引入spring-boot-starter-mail依赖后,系统会根据配置文件中的信息创建JavaMailSender实例。因此,开发者只需在需要使用邮件发送功能的代码中使用@Autowired注解引入JavaMailSender对象即可。

㈡ java 代码发邮件怎么添加附件

实现java发送邮件的过程大体有以下几步:

准备一个properties文件,该文件中存放SMTP服务器地址等参数。

利用properties创建一个Session对象

利用Session创建Message对象,然后设置邮件主题和正文

利用Transport对象发送邮件

需要的jar有2个:activation.jar和mail.jar发送附件,需要用到Multipart对象。

importjava.io.File;
importjava.io.IOException;
importjava.io.InputStream;
importjava.util.Properties;

importjavax.activation.DataHandler;
importjavax.activation.DataSource;
importjavax.activation.FileDataSource;
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;
importjavax.mail.internet.MimeUtility;

{
privateMimeMessagemessage;
privateSessionsession;
privateTransporttransport;

privateStringmailHost="";
privateStringsender_username="";
privateStringsender_password="";

privatePropertiesproperties=newProperties();

/*
*初始化方法
*/
publicJavaMailWithAttachment(booleandebug){
InputStreamin=JavaMailWithAttachment.class.getResourceAsStream("MailServer.properties");
try{
properties.load(in);
this.mailHost=properties.getProperty("mail.smtp.host");
this.sender_username=properties.getProperty("mail.sender.username");
this.sender_password=properties.getProperty("mail.sender.password");
}catch(IOExceptione){
e.printStackTrace();
}

session=Session.getInstance(properties);
session.setDebug(debug);//开启后有调试信息
message=newMimeMessage(session);
}

/**
*发送邮件
*
*@paramsubject
*邮件主题
*@paramsendHtml
*邮件内容
*@paramreceiveUser
*收件人地址
*@paramattachment
*附件
*/
publicvoiddoSendHtmlEmail(Stringsubject,StringsendHtml,StringreceiveUser,Fileattachment){
try{
//发件人
InternetAddressfrom=newInternetAddress(sender_username);
message.setFrom(from);

//收件人
InternetAddressto=newInternetAddress(receiveUser);
message.setRecipient(Message.RecipientType.TO,to);

//邮件主题
message.setSubject(subject);

//向multipart对象中添加邮件的各个部分内容,包括文本内容和附件
Multipartmultipart=newMimeMultipart();

//添加邮件正文
BodyPartcontentPart=newMimeBodyPart();
contentPart.setContent(sendHtml,"text/html;charset=UTF-8");
multipart.addBodyPart(contentPart);

//添加附件的内容
if(attachment!=null){
BodyPartattachmentBodyPart=newMimeBodyPart();
DataSourcesource=newFileDataSource(attachment);
attachmentBodyPart.setDataHandler(newDataHandler(source));

//网上流传的解决文件名乱码的方法,其实用MimeUtility.encodeWord就可以很方便的搞定
//这里很重要,通过下面的Base64编码的转换可以保证你的中文附件标题名在发送时不会变成乱码
//sun.misc.BASE64Encoderenc=newsun.misc.BASE64Encoder();
//messageBodyPart.setFileName("=?GBK?B?"+enc.encode(attachment.getName().getBytes())+"?=");

//MimeUtility.encodeWord可以避免文件名乱码
attachmentBodyPart.setFileName(MimeUtility.encodeWord(attachment.getName()));
multipart.addBodyPart(attachmentBodyPart);
}

//将multipart对象放到message中
message.setContent(multipart);
//保存邮件
message.saveChanges();

transport=session.getTransport("smtp");
//smtp验证,就是你用来发邮件的邮箱用户名密码
transport.connect(mailHost,sender_username,sender_password);
//发送
transport.sendMessage(message,message.getAllRecipients());

System.out.println("sendsuccess!");
}catch(Exceptione){
e.printStackTrace();
}finally{
if(transport!=null){
try{
transport.close();
}catch(MessagingExceptione){
e.printStackTrace();
}
}
}
}

publicstaticvoidmain(String[]args){
JavaMailWithAttachmentse=newJavaMailWithAttachment(true);
Fileaffix=newFile("c:\测试-test.txt");
se.doSendHtmlEmail("邮件主题","邮件内容","[email protected]",affix);//
}
}

㈢ Javamail发送附件,为什么将附件内容直接显示在邮件正文中

DataSource source = new FileDataSource(new File("E:\\path.txt"));
body.setDataHandler(new DataHandler(source));
你好,复在后面在加上附制件文件名的设置:
body.setFileName(MimeUtility.encodeText(文件名));//设置附件文件名
例如:
body.setFileName(MimeUtility.encodeText(new File("E:\\path.txt").getName()));

ps:邮箱会根据附件的MIME类型自动打开附件,设置一个文件名可以将附件流控制成文件,不让邮箱自动打开

㈣ Java实现163邮箱发送邮件到QQ邮箱

在本教程中,我们将指导您使用Java实现将163邮箱的邮件发送到QQ邮箱。请按照以下步骤操作:

首先,在Maven项目中创建一个普通项目。

在项目中添加依赖,具体依赖如下:

4.0.0

com.xlgl.wzy

javamail

1.0

commonsIO

2.5.0

system

${pom.basedir}/jar/commonsIO-2.5.0.jar

com.sun.mail

javax.mail

1.6.1

junit

junit

4.10

log4j

log4j

1.2.8

org.apache.commons

commons-compress

1.5

javax.mail

mail

1.4.7

maven-assembly-plugin

jar-with-dependencies

com.xlgl.wzy.mail.SendMailUtils

make-assembly

package

single

为了实现邮件发送,您需要配置以下信息:

1. 创建配置类,用于接收配置文件中的信息,如服务器地址、端口号、用户名和授权码。

2. 在配置类中设置属性,例如服务器地址、端口号、用户名、授权码等。

3. 实现配置类的加载方法,以加载配置文件中的信息。

4. 在配置文件中,确保授权码是您163邮箱的授权码,而非邮箱地址。若未正确配置,程序将显示错误信息:使用163邮箱或其他网易邮箱时出现535 Error: authentication failed。

5. 准备邮件发送工具类,并编写发送关键方法,包括正文和附件的发送。

6. 在测试类中,通过配置信息加载和发送工具类,进行邮件发送测试。

注意:如果在发送过程中出现错误,请检查代码实现是否有误。确保所有步骤正确无误后,您的邮件应成功发送到QQ邮箱,并且在邮箱中查看到附件。

㈤ java 发送邮件 需要哪些jar包

使用发送邮件需要用到mail.jar和activtion.jar两个包。

该类实现了较完整的邮件发送功能,包括以HTML格式发送,添加附件和抄送人。下面是具体的代码:

packagecn.cgw.util.mail;

importjava.util.Properties;

importjavax.activation.DataHandler;
importjavax.activation.FileDataSource;
importjavax.mail.Address;
importjavax.mail.BodyPart;
importjavax.mail.Message;
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;


publicclassMail{

privateMimeMessagemimeMsg;//MIME邮件对象
privateSessionsession;//邮件会话对象
privatePropertiesprops;//系统属性
privatebooleanneedAuth=false;//smtp是否需要认证
//smtp认证用户名和密码
privateStringusername;
privateStringpassword;
privateMultipartmp;//Multipart对象,邮件内容,标题,附件等内容均添加到其中后再生成MimeMessage对象

/**
*Constructor
*@paramsmtp邮件发送服务器
*/
publicMail(Stringsmtp){
setSmtpHost(smtp);
createMimeMessage();
}

/**
*设置邮件发送服务器
*@paramhostNameString
*/
publicvoidsetSmtpHost(StringhostName){
System.out.println("设置系统属性:mail.smtp.host="+hostName);
if(props==null)
props=System.getProperties();//获得系统属性对象
props.put("mail.smtp.host",hostName);//设置SMTP主机
}


/**
*创建MIME邮件对象
*@return
*/
()
{
try{
System.out.println("准备获取邮件会话对象!");
session=Session.getDefaultInstance(props,null);//获得邮件会话对象
}
catch(Exceptione){
System.err.println("获取邮件会话对象时发生错误!"+e);
returnfalse;
}

System.out.println("准备创建MIME邮件对象!");
try{
mimeMsg=newMimeMessage(session);//创建MIME邮件对象
mp=newMimeMultipart();

returntrue;
}catch(Exceptione){
System.err.println("创建MIME邮件对象失败!"+e);
returnfalse;
}
}

/**
*设置SMTP是否需要验证
*@paramneed
*/
publicvoidsetNeedAuth(booleanneed){
System.out.println("设置smtp身份认证:mail.smtp.auth="+need);
if(props==null)props=System.getProperties();
if(need){
props.put("mail.smtp.auth","true");
}else{
props.put("mail.smtp.auth","false");
}
}

/**
*设置用户名和密码
*@paramname
*@parampass
*/
publicvoidsetNamePass(Stringname,Stringpass){
username=name;
password=pass;
}

/**
*设置邮件主题
*@parammailSubject
*@return
*/
publicbooleansetSubject(StringmailSubject){
System.out.println("设置邮件主题!");
try{
mimeMsg.setSubject(mailSubject);
returntrue;
}
catch(Exceptione){
System.err.println("设置邮件主题发生错误!");
returnfalse;
}
}

/**
*设置邮件正文
*@parammailBodyString
*/
publicbooleansetBody(StringmailBody){
try{
BodyPartbp=newMimeBodyPart();
bp.setContent(""+mailBody,"text/html;charset=GBK");
mp.addBodyPart(bp);

returntrue;
}catch(Exceptione){
System.err.println("设置邮件正文时发生错误!"+e);
returnfalse;
}
}
/**
*添加附件
*@paramfilenameString
*/
publicbooleanaddFileAffix(Stringfilename){

System.out.println("增加邮件附件:"+filename);
try{
BodyPartbp=newMimeBodyPart();
FileDataSourcefileds=newFileDataSource(filename);
bp.setDataHandler(newDataHandler(fileds));
bp.setFileName(fileds.getName());

mp.addBodyPart(bp);

returntrue;
}catch(Exceptione){
System.err.println("增加邮件附件:"+filename+"发生错误!"+e);
returnfalse;
}
}

/**
*设置发信人
*@paramfromString
*/
publicbooleansetFrom(Stringfrom){
System.out.println("设置发信人!");
try{
mimeMsg.setFrom(newInternetAddress(from));//设置发信人
returntrue;
}catch(Exceptione){
returnfalse;
}
}
/**
*设置收信人
*@paramtoString
*/
publicbooleansetTo(Stringto){
if(to==null)returnfalse;
try{
mimeMsg.setRecipients(Message.RecipientType.TO,InternetAddress.parse(to));
returntrue;
}catch(Exceptione){
returnfalse;
}
}

/**
*设置抄送人
*@paramtoString
*/
publicbooleansetCopyTo(Stringto)
{
if(to==null)returnfalse;
try{
mimeMsg.setRecipients(Message.RecipientType.CC,(Address[])InternetAddress.parse(to));
returntrue;
}
catch(Exceptione)
{returnfalse;}
}

/**
*发送邮件
*/
publicbooleansendOut()
{
try{
mimeMsg.setContent(mp);
mimeMsg.saveChanges();
System.out.println("正在发送邮件....");

SessionmailSession=Session.getInstance(props,null);
Transporttransport=mailSession.getTransport("smtp");
transport.connect((String)props.get("mail.smtp.host"),username,password);
transport.sendMessage(mimeMsg,mimeMsg.getRecipients(Message.RecipientType.TO));
transport.sendMessage(mimeMsg,mimeMsg.getRecipients(Message.RecipientType.CC));
//transport.send(mimeMsg);

System.out.println("发送邮件成功!");
transport.close();

returntrue;
}catch(Exceptione){
System.err.println("邮件发送失败!"+e);
returnfalse;
}
}

/**
*调用sendOut方法完成邮件发送
*@paramsmtp
*@paramfrom
*@paramto
*@paramsubject
*@paramcontent
*@paramusername
*@parampassword
*@returnboolean
*/
publicstaticbooleansend(Stringsmtp,Stringfrom,Stringto,Stringsubject,Stringcontent,Stringusername,Stringpassword){
MailtheMail=newMail(smtp);
theMail.setNeedAuth(true);//需要验证

if(!theMail.setSubject(subject))returnfalse;
if(!theMail.setBody(content))returnfalse;
if(!theMail.setTo(to))returnfalse;
if(!theMail.setFrom(from))returnfalse;
theMail.setNamePass(username,password);

if(!theMail.sendOut())returnfalse;
returntrue;
}

/**
*调用sendOut方法完成邮件发送,带抄送
*@paramsmtp
*@paramfrom
*@paramto
*@paramto
*@paramsubject
*@paramcontent
*@paramusername
*@parampassword
*@returnboolean
*/
publicstaticbooleansendAndCc(Stringsmtp,Stringfrom,Stringto,Stringto,Stringsubject,Stringcontent,Stringusername,Stringpassword){
MailtheMail=newMail(smtp);
theMail.setNeedAuth(true);//需要验证

if(!theMail.setSubject(subject))returnfalse;
if(!theMail.setBody(content))returnfalse;
if(!theMail.setTo(to))returnfalse;
if(!theMail.setCopyTo(to))returnfalse;
if(!theMail.setFrom(from))returnfalse;
theMail.setNamePass(username,password);

if(!theMail.sendOut())returnfalse;
returntrue;
}

/**
*调用sendOut方法完成邮件发送,带附件
*@paramsmtp
*@paramfrom
*@paramto
*@paramsubject
*@paramcontent
*@paramusername
*@parampassword
*@paramfilename附件路径
*@return
*/
publicstaticbooleansend(Stringsmtp,Stringfrom,Stringto,Stringsubject,Stringcontent,Stringusername,Stringpassword,Stringfilename){
MailtheMail=newMail(smtp);
theMail.setNeedAuth(true);//需要验证

if(!theMail.setSubject(subject))returnfalse;
if(!theMail.setBody(content))returnfalse;
if(!theMail.addFileAffix(filename))returnfalse;
if(!theMail.setTo(to))returnfalse;
if(!theMail.setFrom(from))returnfalse;
theMail.setNamePass(username,password);

if(!theMail.sendOut())returnfalse;
returntrue;
}

/**
*调用sendOut方法完成邮件发送,带附件和抄送
*@paramsmtp
*@paramfrom
*@paramto
*@paramto
*@paramsubject
*@paramcontent
*@paramusername
*@parampassword
*@paramfilename
*@return
*/
publicstaticbooleansendAndCc(Stringsmtp,Stringfrom,Stringto,Stringto,Stringsubject,Stringcontent,Stringusername,Stringpassword,Stringfilename){
MailtheMail=newMail(smtp);
theMail.setNeedAuth(true);//需要验证

if(!theMail.setSubject(subject))returnfalse;
if(!theMail.setBody(content))returnfalse;
if(!theMail.addFileAffix(filename))returnfalse;
if(!theMail.setTo(to))returnfalse;
if(!theMail.setCopyTo(to))returnfalse;
if(!theMail.setFrom(from))returnfalse;
theMail.setNamePass(username,password);

if(!theMail.sendOut())returnfalse;
returntrue;
}

}
阅读全文

与javamail发送带附件的邮件相关的资料

热点内容
如何做动漫视频教程 浏览:331
苹果公司企业架构 浏览:152
顺丰录音文件管理在哪里 浏览:521
象山新建网站制作有哪些步骤 浏览:686
什么app可以查化妆品的日期 浏览:174
中国移动香港的网络制式 浏览:752
编程在五行中属什么 浏览:54
中青校园app可以发什么文章 浏览:397
主文件组可以存放哪些类型的文件 浏览:678
有没有id和账号和密码 浏览:5
形势和政策用什么app 浏览:340
统赢编程nc文件输出路径设定 浏览:849
什么绘画app涂色不会盖住线稿 浏览:767
如何自学计算机编程序 浏览:38
word2003如何去掉底色 浏览:539
dnf85版本野猪套 浏览:655
iphone3gs微信41 浏览:646
js判断value是否为空 浏览:323
制作网站开发公司 浏览:153
阿里巴巴app怎么开发 浏览:781

友情链接