用JavaMail API编写可带附件的邮件发送程序

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情
利用Sun公司提供的JavaMail API可以很方便的开发邮件发送程序。也许你已经可以利用它来发送一段简单的文本了,但想不想使你的程序像OUTLOOK一样也能发送附件呢?本文在简单介绍了JavaMail之后,详细讲解了一段完整的送信的JavaBean及一个十分轻巧的servlet。

(没有装载JavaMail API的读者,可以到 此站点下载,并按照Readme.txt设置好ClassPath)
一、JavaMail中一些我们需要的类
1.Properties

JavaMail需要Properties来创建一个session对象,其属性值就是发送邮件的主机,如:

Properties props = new Properties ();
props.put("mail.smtp.host", "smtp.xxxx.com");//可以换上你的smtp主机名,就像你在OutLook中设置smtp主机名一样。

2.Session

所有的基于JavaMail的程序都至少需要一个或全部的对话目标。

Session session = Session.getInstance(props, null);

3.MimeMessage

信息对象将把你所发送的邮件真实的反映出来。

MimeMessage msg = new MimeMessage(session);

4.Transport

邮件的发送是由Transport来完成的:

Transport.send(msg);

二、我们自己创建的可发送附件的类
import java.util.* ;
import java.io.* ;
import javax.mail.* ;
import javax.mail.internet.* ;
import javax.activation.* ;
public class Mail {
//定义发件人、收件人、主题等
String to="";
String from="";
String host="";
String filename="";
String subject="";
//用于保存发送附件的文件名的集合
Vector file = new Vector();
//做一个可以传发件人等参数的构造
public Mail (String to,String from,String smtpServer,String subject){
//初始化发件人、收件人、主题等
this.to=to;
this.from=from;
this.host=smtpServer;
this.subject=subject;
}
//该方法用于收集附件名
public void attachfile(String fname){
file.addElement(fname);
}
//开始发送信件的方法
public boolean startSend(){
//创建Properties对象
Properties props = System.getProperties();
//创建信件服务器
props.put("mail.smtp.host", host);
//得到默认的对话对象
Session session=Session.getDefaultInstance(props, null); try {
//创建一个消息,并初始化该消息的各项元素
MimeMessage msg = new MimeMessage(session);
msg.setFrom(new InternetAddress(from));
InternetAddress[] address={new InternetAddress(to)};
msg.setRecipients(Message.RecipientType.TO,address);
msg.setSubject(subject);
//后面的BodyPart将加入到此处创建的Multipart中
Multipart mp = new MimeMultipart();
//利用枚举器方便的遍历集合
Enumeration efile=file.elements();
//检查序列中是否还有更多的对象
while(efile.hasMoreElements()){
MimeBodyPart mbp=new MimeBodyPart();
//选择出每一个附件名
filename=efile .nextElement().toString();
//得到数据源
FileDataSource fds=new FileDataSource(filename);
//得到附件本身并至入BodyPart
mbp.setDataHandler(new DataHandler(fds));
//得到文件名同样至入BodyPart
mbp.setFileName(fds.getName());
mp.addBodyPart(mbp);
}
//移走集合中的所有元素
file.removeAllElements();
//Multipart加入到信件
msg.setContent(mp);
//设置信件头的发送日期
msg.setSentDate(new Date());
//发送信件
Transport.send(msg);
} catch (MessagingException mex) {
mex.printStackTrace();
Exception ex = null;
if ((ex=mex.getNextException())!=null){
ex.printStackTrace();
}
return false;
}
return true;
}
}

三、一个简单的servlet
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class SendMail extends
HttpServlet implements SingleThreadModel{
public void init(ServletConfig Conf)
throws ServletException {
super.init(Conf);
}
public void doPost(HttpServletRequest
Req, HttpServletResponse Res)
throws ServletException, IOException {
try{
//实例化刚才我们做的类,并按其构造传进相应的参数
Mail sendmail=newMail("zhang@263.net",
"chtwoy@21cn.com","smtp.21cn.com","test");
sendmail.attachfile("table.pdf");
sendmail.startSend();
}catch(Exception e){
e.printStackTrace();
}
}
public void destroy() {
}
}

四、小结
至此,你已经可以在邮件中添加附件了,而且可以是多个。像这样,将响应与逻辑相分离对代码的扩展和维护是相当有好处的。若Beans与servlet不在同一个包下,别忘了“import”。

java使用ews-java-api发送邮件(包括附件和内联图片处理) 阅读详情

相关推荐

JavaMail 网易邮件发送demo-发送附件邮件

JavaMail 网易邮件发送demo-发送附件邮件

joshua317的博客 1401

Java程序中使用JavaMail发送图片和附件邮件

主要介绍了Java程序中使用JavaMail发送图片和附件邮件,JavaMail是专门用来处理邮件的Java API,需要的朋友可以参考下

javamail发送邮件附件

该资源是一个javamail发送邮件的例子,里面集成了别人的文件发送的功能,单次发送邮件只能上传一个附件。是一个测试方法,拿过来改一改邮件的地址和密码就可以使用了

Java实现发送邮件多个附件,可以直接用

使用JavaMail发送邮件,要求实现多个附件功能,可以直接用。

qq_46844094的博客 3451

java发送pdf格式邮件_java – 以Pdf附件的形式发送电子邮件作为流

我想发送一个Pdf作为电子邮件附件(我正在使用JavaMail API).我把Pdf(由jasper生成)作为byte [].public InputStream exportPdfToInputStream(User user) throws ParseErrorException, MethodInvocationException, ResourceNotFoundException, JR...

weixin_35953155的博客 1290

使用javamail实现发送简单邮件附件邮件

javamail是java给我们提供用来发送邮件的一组接口。  我们实现发送邮件需要以下几步    1.打开邮箱的POP3/SMTP服务    2.导入mail.jar 和activation.jar两个jar包。    3.得到Session类的对象    4.根据Session类的对象创建MimeMessage类对象    5.使用TransPort类的send()方法实现发送邮件1.打开邮箱...

Great_ideal的博客 1057

如何成为一个优秀的jsp程序

                       如何成为一个优秀的jsp程序员      在网上看到很多问题是关于如何学习jsp的,正好网上看到一篇关于学习jsp的文章,就摘了一部分翻译过来,希望能对大家学习jsp有点指导。 一个普通的错误是把JSP当作简化的 Java。它不是,(事实上, JSP 是简化的 servlets 。)程序员通常试着没有学习要求的支持技巧而 直接学习 JSP 。JSP 是

yzc的专栏 3335

如何成为一个成功的Jsp程序员?

一个普通的错误是把JSP当作简化的 Java。它不是,(事实上, JSP 是简化的 servlets 。)程序员通常试着没有学习要求的支持技巧而 直接学习 JSP 。JSP 是一个衔接技术,并且成功地连接你需要理解的另外的技术。如果你已经知道 Java,HTML 和 Javascript,这意味着 JSP 将确实是简单的。 需要成为一个成功的 JSP 程序员可以参考这个时间表。请注意下列:

About program 979

如何成为一个成功的Jsp程序

如何成为一个成功的Jsp程序员?一个普通的错误是把JSP当作简化的 Java。它不是,(事实上, JSP 是简化的 servlets 。)程序员通常试着没有学习要求的支持技巧而 直接学习 JSP 。JSP 是一个衔接技术,并且成功地连接你需要理解的另外的技术。如果你已经知道 Java,HTML 和 Javascript,这意味着 JSP 将确实是简单的。   需要成为一个成功的 JSP 程序员可以

别墅中的一群人 647

JSP——编写三个JSP页面,main.jsp、circle.jsp和ladder.jsp,将三个JSP页面保存在同一个Web服务目录中,

编写三个JSP页面,main.jsp、circle.jsp和ladder.jsp, 将三个JSP页面保存在同一个Web服务目录中, main.jsp使用include动作标记加载circle.jsp和ladder.jsp页面。 circle.jsp页面可以计算并显示圆的面积,ladder.jsp页面可以计算并显示梯形的面积。 当circle.jsp和lader.jsp被加载时获取main....

lmm0513的博客 2万+

java 收发 附件 邮件

java 实现 收发附件邮件。 依赖 mail.jar

javamail(界面的javamail)

javamail开发,图形界面,邮件发送,接收,附件,html,邮件解析

如何成为一个优秀的JSP程序

最近在网上看到很多问题是关于如何学习JSP的,就摘了一部分翻译过来,希望能对大家学习JSP有点指导,如果你已经知道Java,HTML和JavaScript,这意味着JSP将确实是简单的。

JeelonXu.feng 1438

一个成功的Jsp程序员该怎样学习JSP呢?

一个普通的错误是把JSP当作简化的 Java。它不是,(事实上, JSP 是简化的 servlets 。)程序员通常试着没有学习要求的支持技巧而 直接学习 JSP 。JSP 是一个衔接技术,并且成功地连接你需要理解的另外的技术。如果你已经知道 Java,HTML 和 Javascript,这意味着 JSP 将确实是简单的。 需要成为一个成功的 JSP 程序员可以参考这个时间表。请注意下列: *忽略

冷枫@CSDN 2048

JSP--从一个jsp页面通过按钮跳转到另一个jsp页面

JSP按钮跳转页面的方法 一句代码实现jsp页面跳转! 在初始的index.jsp页面中,给按钮添加一个点击事件(onclick) οnclick="window.location.href=‘register.jsp’;" 通过单引号引住的部分是我们要跳转到的那个jsp页面 <%-- Created by IntelliJ IDEA. User: 杨小冥 Date: 2020/11/11 Time: 18:32 To change this template use File |

yxmoar的博客 3万+

【JSP】第一个JSP程序:Hello,JSP

JSP就是Servlet。如果不会Servlet,就无法理解JSP。通过本文,你将学到如何实现第一个JSP程序,以及JSP程序的实现原理。

极客-多重人格递归 5012
上一篇: 使用JSP读取客户端信息
下一篇: 从.net生成的html中找到的一个验证email地址的函数(正则表达式)
fxfboy
博客等级 码龄24年 10粉丝 13原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值