java邮件中添加excel_基于javaMail的邮件发送--excel作为附件

基于JavaMail的Java邮件发送

Author xiuhong.chen@hand-china.com

Desc 简单邮件发送

Date 2017/12/8

项目中需要根据物料资质的状况实时给用户发送邮件,然后我就简单学习了SMTP.

电子邮件的在网络中传输和网页一样需要遵从特定的协议,常用的电子邮件协议包括 SMTP,POP3,IMAP。其中邮件的创建和发送只需要用到 SMTP协议,所以本文也只会涉及到SMTP协议。SMTP 是 Simple Mail Transfer Protocol 的简称,即简单邮件传输协议。

1.导入jar包javax.mail.jar

特别注意:

本测试用例用的 JavaMail 版本是 1.6.0,如果下载到其他版本的 JavaMail 运行时出现问题,请使用 JavaMail 1.6.0 版本再进行尝试。

使用 JavaMail 1.6.0 要求的 JDK 版本必须是 JDK 1.7 以上(建议使用最新版 JDK)。

不要直接就完完全全复制我的代码,需要 修改一下发送的标题、内容、用户昵称,要不然所有人都直接复制我的代码发送,内容一致,邮箱服务器就可能会检测到这些内容是垃圾广告内容,不让你发送,会返回错误码,查询错误码也能查询到失败原因。

2.创建一封简单的电子邮件

首先创建一个 Java 工程,把下载好的 javax.mail.jar 作为类库加入工程

邮件创建步骤:

配置连接邮件服务器的参数( 邮件服务器SMTP, 是否需要SMTP验证 )

创建一个邮件对象( MimeMessage )

设置发件人,收件人 ( 可增加多个收件人,抄送人,密送人 )

设置邮件标题, 正文 , 附件等

设置显示的发送时间

public void sendMail() throws Exception{

System.out.println("sendMailServlet-----start");

//1.创建邮件对象

Properties properties = new Properties();

properties.put("mail.smtp.host", "mail.hand-china.com"); // 指定SMTP服务器

properties.put("mail.smtp.auth", "true"); // 指定是否需要SMTP验证

Session session = Session.getInstance(properties);

MimeMessage mimeMessage =new MimeMessage(session);

/*2.设置发件人

* 其中 InternetAddress 的三个参数分别为: 邮箱, 显示的昵称(只用于显示, 没有特别的要求), 昵称的字符集编码

* */

mimeMessage.setFrom(new InternetAddress("xiuhong.chen@hand-china.com","xiuhong","UTF-8"));

/*3.设置收件人

To收件人 CC 抄送 BCC密送*/

mimeMessage.setRecipient(MimeMessage.RecipientType.TO,new InternetAddress("17862***@qq.com","xiuhong","UTF-8"));

mimeMessage.addRecipient(MimeMessage.RecipientType.TO,new InternetAddress("178622***@qq.com","xiuhong","UTF-8"));

/*4.设置标题和内容*/

mimeMessage.setSubject("测试邮件","UTF-8");

mimeMessage.setContent("Test Content:这是一封测试邮件...","text/html;charset=UTF-8");

mimeMessage.setSentDate(new Date());

/*5.保存邮件*/

mimeMessage.saveChanges();

Transport transport = session.getTransport("smtp"); //获取邮件传输对象

transport.connect("mail.hand-china.com","xiuhong.chen@hand-china.com","*******");

transport.sendMessage(mimeMessage,mimeMessage.getAllRecipients());

transport.close();

System.out.println("sendMailServlet-----end");

}

查看邮箱客户端,可以接收到邮件

58c154af194a472f994412a2655f958a.png

某些邮箱服务器要求 SMTP 连接需要使用 SSL 安全认证 (为了提高安全性, 邮箱支持SSL连接, 也可以自己开启),

如果无法连接邮件服务器, 仔细查看控制台打印的 log, 如果有有类似 “连接失败, 要求 SSL 安全连接” 等错误,需要开启SSL安全连接,如下代码:

/*SMTP 服务器的端口 (非 SSL 连接的端口一般默认为 25, 可以不添加, 如果开启了 SSL 连接,需要改为对应邮箱的 SMTP 服务器的端口, 具体可查看对应邮箱服务的帮助,

QQ邮箱的SMTP(SLL)端口为465或587, 其他邮箱自行去查看)*/

final String smtpPort = "465";

props.setProperty("mail.smtp.port", smtpPort);

props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");

props.setProperty("mail.smtp.socketFactory.fallback", "false");

props.setProperty("mail.smtp.socketFactory.port", smtpPort);

3.创建一封包含图片和附件的复杂邮件

一封复杂的邮件内容可以看做是由很多节点(或者可以说是“片段”/“部分”/“零件”)组成,文本、图片、附件等都可以看成是邮件内容中的一个节点。这些节点之间又可以相互关联组合成一个节点。最终组合成一个大节点就是邮件的正文内容。

比如图片和文字是关联关系related,和简单邮件不同之处在于设置图片节点和文本节点

/*创建复杂邮件*/

public void sendMail2()throws Exception{

System.out.println("sendMailServlet-----start2");

//1.创建邮件对象

Properties properties = new Properties();

properties.put("mail.smtp.host", "mail.hand-china.com"); // 指定SMTP服务器

properties.put("mail.smtp.auth", "true"); // 指定是否需要SMTP验证

Session

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值