如何用java文件java mail 发送邮件件

IT技术相关(101)
都快赶上每年一贴了,年年都有孩子们问我怎么在java程序里面发邮件,特别是html格式的邮件,在这里贴个例子吧:
maven里面引入javamail&
&dependency&
&groupId&javax.mail&/groupId&
&artifactId&mail&/artifactId&
&version&1.4.7&/version&
&/dependency&
然后写个简单的工具类
package com.xxx.
import javax.mail.MessagingE
import javax.mail.S
import javax.mail.T
import javax.mail.internet.InternetA
import javax.mail.internet.MimeM
import javax.mail.internet.MimeU
public class HtmlEmail {
private String smtpS
public void sendMessage(String to, String subject, String messageText) throws MessagingException, java.io.UnsupportedEncodingException {
java.util.Properties props = new java.util.Properties();
props.setProperty(&mail.smtp.auth&, &true&);//指定是否需要SMTP验证
props.setProperty(&mail.smtp.host&, smtpServer);//指定SMTP服务器
props.put(&mail.transport.protocol&, &smtp&);
Session mailSession = Session.getDefaultInstance(props);
//mailSession.setDebug(true);//是否在控制台显示debug信息
InternetAddress fromAddress = new InternetAddress(username);
InternetAddress toAddress = new InternetAddress(to);
MimeMessage emailMessage = new MimeMessage(mailSession);
emailMessage.setFrom(fromAddress);
emailMessage.addRecipient(javax.mail.Message.RecipientType.TO, toAddress);
emailMessage.setSentDate(new java.util.Date());
emailMessage.setSubject(MimeUtility.encodeText(subject, &utf-8&, &B&));
emailMessage.setContent(messageText, &text/charset=utf-8&);
Transport transport = mailSession.getTransport(&smtp&);
transport.connect(smtpServer, username, password);
transport.sendMessage(emailMessage, emailMessage.getAllRecipients());
transport.close();
public String getSmtpServer() {
return smtpS
public void setSmtpServer(String smtpServer) {
this.smtpServer = smtpS
public String getUsername() {
public void setUsername(String username) {
this.username =
public String getPassword() {
public void setPassword(String password) {
this.password =
然后在spring里面配置一下
&bean id=&htmlMail& class=&com.xxx.tools.HtmlEmail&&
&property name=&smtpServer& value=&&/&
&property name=&username& value=&&&&/property&
&property name=&password& value=&xxxxxxx&&&/property&
然后在需要使用的地方使用:
@Controller
@RequestMapping(&/user&)
public class UserRegController {
private HtmlE
@RequestMapping(&/reg&)
public void sendMail(@RequestParam(&username&) String username, @RequestParam(&userpass&) String userpass, @RequestParam(&email&) String email_addr, HttpServletRequest request) {
String valid_string = request.getSession(true).getId();
String valid_url = &&a href='http://localhost:8080/user/valid?username=& + username + &&validString=& + valid_string + &' target='_blank'& 点击此链接激活账号&/a&&;
email.sendMessage(email_addr, &用户激活&, valid_url);
} catch (MessagingException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:399845次
积分:4990
积分:4990
排名:第5431名
原创:110篇
转载:16篇
评论:227条
(1)(1)(1)(1)(2)(1)(1)(1)(1)(1)(1)(1)(1)(2)(1)(1)(1)(1)(3)(3)(4)(2)(5)(2)(2)(1)(2)(1)(1)(1)(1)(1)(5)(2)(3)(1)(1)(5)(3)(5)(1)(2)(1)(1)(1)(1)(1)(1)(1)(1)(7)(1)(1)(2)(1)(4)(1)(8)(10)(1)(1)(1)(2)(1)用户名:xxxx66yyyy
文章数:107
评论数:419
访问量:1673110
注册日期:
阅读量:1297
阅读量:3317
阅读量:436777
阅读量:1123892
51CTO推荐博文
下载了 JavaMail 1.4.3 版本,如果所用 JDK 是 6.0 则不用再下载 activation 。下载得到的是 javamail-1.4.3.zip 的压缩包,解压得到 mail.jar 包,配置环境变量之后就可以使用了。从解压后的文件夹中有 JavaMail-1.4.pdf 这个 JavaMail 的设计规范文档。虽然是英文,但是稍微看一看我就从中截了 4 张比较有用的图片,觉得有必要了解一下,如下:
1、JavaMail 架构层次图:
2、JavaMail 的类层次图:
3、JavaMail 中几个最重要类的类图:
4、MimeMessage 类的具体类图:
&&JavaMail 文档有时间慢慢理解,使用 JavaMail 开发邮件应用程序可以参考解压之后的 JavaMail 开发文档,下面用代码实现创建一个纯文本格式的邮件:
纯文本格式的邮件:
import&java.io.FileOutputS &import&java.util.D &import&java.util.P &&import&javax.mail.M &import&javax.mail.S &import&javax.mail.internet.InternetA &import&javax.mail.internet.MimeM &&&&&public&class&TextMessage&{ &&&&&public&static&void&main(String[]&args)&throws&Exception{ &&&&&&&&& &&&&&&&&&String&from&=&&test_&; &&&&&&&&&String&to&=&&test_&; &&&&&&&&&String&subject&=&&创建一个纯文本邮件!&; &&&&&&&&&String&body&=&&纯文本邮件测试!!!&; &&&&&&&&& &&&&&&&&&&&&&&&&&&Session&session&=&Session.getDefaultInstance(new&Properties()); &&&&&&&&& &&&&&&&&&&&&&&&&&&MimeMessage&msg&=&new&MimeMessage(session); &&&&&&&&& &&&&&&&&&&&&&&&&&&msg.setFrom(new&InternetAddress(from)); &&&&&&&&& &&&&&&&&&&&&&&&&&&msg.setRecipients(Message.RecipientType.TO,&InternetAddress.parse(to)); &&&&&&&&& &&&&&&&&&&&&&&&&&&msg.setSubject(subject); &&&&&&&&& &&&&&&&&&&&&&&&&&&msg.setSentDate(new&Date()); &&&&&&&&& &&&&&&&&&&&&&&&&&&msg.setText(body); &&&&&&&&& &&&&&&&&&&&&&&&&&&msg.saveChanges(); &&&&&&&&& &&&&&&&&&&&&&&&&&&msg.writeTo(new&FileOutputStream(&textMail.eml&)); &&&&&} &}&
编译运行,得到 textMail.eml 文件,双击自动用 Outlook 打开,如下图:
&单击 Outlook 中的&文件&&& &属性&&& &详细信息&可看到该邮件的邮件头,再点击&邮件来源&可看到该邮件的源文件内容,如下图:
注意上面被选择的内容,Content-Transfer-Encoding: base64 说明是被用 BASE64 编码转换过的了,因此邮件的正文部分如下图:
&因为邮件中的 subject 和 body 都用到了中文,所以字符集编码时 charset=GBK 。
&HTML 格式的邮件:
再用同样的方式创建一封 HTML 格式的邮件,对上面的代码稍作修改即可,代码如下:
import&java.io.FileOutputS &import&java.util.D &import&java.util.P &&import&javax.mail.M &import&javax.mail.S &import&javax.mail.internet.InternetA &import&javax.mail.internet.MimeM &&&&&&public&class&HtmlMessage&{ &&&&&public&static&void&main(String[]&args)&throws&Exception{ &&&&&&&&&&String&from&=&&test_&; &&&&&&&&&String&to&=&&test_&; &&&&&&&&&String&subject&=&&创建一个&HTML&格式邮件!&; &&&&&&&&&String&body&=&&&h4&HTML&格式的邮件测试!!!&/h4&&&&+ &&&&&&&&&&&a&href&=&http://haolloyin./&&蚂蚁&/a&&; &&&&&&&&& &&&&&&&&&&&&&&&&&&Session&session&=&Session.getDefaultInstance(new&Properties()); &&&&&&&&& &&&&&&&&&&&&&&&&&&MimeMessage&msg&=&new&MimeMessage(session); &&&&&&&&& &&&&&&&&&&&&&&&&&&msg.setFrom(new&InternetAddress(from)); &&&&&&&&& &&&&&&&&&&&&&&&&&&msg.setRecipients(Message.RecipientType.TO,&InternetAddress.parse(to)); &&&&&&&&& &&&&&&&&&&&&&&&&&&msg.setSubject(subject); &&&&&&&&& &&&&&&&&&&&&&&&&&&msg.setSentDate(new&Date()); &&&&&&&&& &&&&&&&&&&&&&&&&&&&msg.setContent(body,&&text/charset&=&gbk&); &&&&&&&&& &&&&&&&&&&&&&&&&&&msg.saveChanges(); &&&&&&&&& &&&&&&&&&&&&&&&&&&msg.writeTo(new&FileOutputStream(&htmlMail.eml&)); &&&&&} &}&
注意上面代码中的 msg.setContent(body, &text/charset = gbk&);& 语句,双击生成的文件自动用 Outlook 打开,如下图:
&我们注意到编码方式变成了 quoted-printable ,它与 BASE64 编码类似,都是将纯粹的二进制数据转换成可以打印的 ASCII 字符,具体的区别和用途请查阅资料。
目前的还不可以给指定的邮箱发送邮件,只是创建一封邮件而已。
1、了解 MIME 协议以及 MIME 邮件的组织结构对理解上面给出的类图很有帮助;
2、如果邮件的 subject 和 body 都不涉及中文,那么整封邮件都不会被转码,而是用最原始的 7bit 编码格式,可以试一试看一下效果。
我的相关文章:
本文出自 “” 博客,请务必保留此出处
了这篇文章
类别:┆阅读(0)┆评论(0)
17:26:39 09:59:5713.如何直接发送一封现有的邮件文件【传智播客张孝祥Java邮件开发视频教程】
- 爱酷学习网,免费高清视频教程在线观看
13.如何直接发送一封现有的邮件文件
距离广告结束还有
Album Info
请输入正确的邮件(格式:xxx@xxx.xx)
必须填本条信息!怎样用java发送邮件_Java教程_动态网站制作指南
怎样用java发送邮件
来源:人气:8385
  前几天由于需要,动手写了一个邮件发送的 .现在总结一些心得。     首先我去下载了一个javamailapi1.2,现在最新版本1.3了。其实这个api是一些类库集合。解压后,找到mail.jar加入你的classpath中即可,还有其他一些jar,一般用户都用不着。接着,要去下载一个JavaBeans(tm)Activation Framework Standard Extension   简称JAF的冬冬,将activation.jar加入classpath。主要是用到里面的类javax.activation.*。JAF是sun的一个standard extension。100% Pure Java (大家都爱这末说,~_~).可以看看他的Specification(我也没看完)。     尽管java中有邮件发送接受类,但用Javamailapi更方便。我差点误入歧途。我主要讲讲带附件的邮件发送。假如专心看,在Javamailapi中的demo中有一个sendfile.java的Example。假如您看过那个了,以下的就不用看了,因为这个比它的简单,没有输入任何参数。     import java.io.*;   import java.util.*;   import javax.mail.*;   import javax.mail.internet.*;   import javax.activation.*;     //Warning: 以下内容是必须往里面套的,都是封装好的东西,过多的理由我也说出上,高手补充。     public class SendAttachment   {   
public static void main(String[] args)   
{     // 创建 operties ,里面包含了发送邮件服务器的地址。     
Properties mailProps = new Properties();   
mailProps.put("mail.smtp.host", "192.0.0.1");
//"mail.smtp.host"随便叫啥都行,"192.0.0.1"必须是真实可用的。     // 创建
Session mailSession = Session.getDefaultInstance(mailProps);       // 创建 邮件的message,message对象包含了邮件众多有的部件,都是封装成了set方法去设置的     
MimeMessage message = new MimeMessage(mailSession);     // 设置发信人   
message.setFrom(new InternetAddress(   
""));   //收信人   
message.setRecient(Message.RecipientType.TO,   
new InternetAddress(""));     // 邮件标题   
message.setSubject("I love you");
//haha,恐吓人     // 创建 Mimemultipart,这是包含多个附件是必须创建的。假如只有一个内容,没有附件,可以直接用message.setText(String str)   //去写信的内容,比较方便。附件等于是要创建多个内容,往下看更清楚。     
MimeMultipart multi = new MimeMultipart();     // 创建 BodyPart,主要作用是将以后创建的n个内容加入MimeMultipart.也就是可以发n个附件。我这里有2个BodyPart.     
BodyPart textBodyPart = new MimeBodyPart();
//第一个BodyPart.主要写一些一般的信件内容。     
textBodyPart.setText("详情见附件");     // 压入第一个BodyPart到MimeMultipart对象中。   
multi.addBodyPart(textBodyPart);     // 创建第二个BodyPart,是一个FileDAtaSource     
FileDataSource fds = new FileDataSource("c:\myattachment.txt"); //必须存在的文档,否则throw异常。     
BodyPart fileBodyPart = new MimeBodyPart();
//第二个BodyPart   
fileBodyPart.setDataHandler(new DataHandler(fds));
//字符流形式装入文件   
fileBodyPart.setFileName("report.xls");
//设置文件名,可以不是原来的文件名。     /*   *
以下是我用另一种方式写入附件,但不成功,附件总是0K字节。请高手点解,以上的方式我是参照demo的。   *
FileInputStream in = new FileInputSteam("c:\myattachment.txt");   *
BodyPart fileBodyPart = new MimeBodyPart(in);
fileBodyPart.setFileName("report.xls");
//奶奶的折腾我2天,搞不定。   **   */     //不讲了,同第一个BodyPart.   
multi.addBodyPart(fileBodyPart);     // MimeMultPart作为Content加入message     
message.setContent(multi);     // 所有以上的工作必须保存。     
message.saveChanges();     // 发送,利用Transport类,它是SMTP的邮件发送协议,     
Transport.send(message);   
catch (Exception exc)   
exc.printStackTrace();   
}   }       //终于写完了,累死哥哥我了。     //以上谨代表个人观点,不妥之处务请指出,以免误人子弟。希望多多指教。
优质网站模板}

我要回帖

更多关于 java mail 发送邮件 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信