java语言发送邮件

1:电子邮件在日常生活中运用的相当的广泛。作为开发者来说我们如何去发送一封电子邮件到指定的邮箱呢?

首先电子邮件是在网络中传输的,所以就和网页一样,需要一定的协议,网页的http协议,而电子邮件常用的协议包括了

  1. SMTP协议。
  2. POP3协议。
  3. IMAP协议。

2:SMTP创建,发送邮件

如若只需创建和发送邮件的话只需要用到SMTP协议(简单的邮件传输协议【Simple Mail Transfer Protocal】),SMTP目标是向用户提供高效可靠的邮件传

输。重要特点:接力传输,即邮件可以通过不同网络上的主机接力方式传送。通常有两种方式传输:第一是邮件从客户端传送到服务器;第二是从某一个服务器传

输到另外一个服务器。

3:SMTP的工作机制如下:

SMTP的两种工作模式,发送SMTP和接受SMTP。具体的工作方式为:发送SMTP在接受到用户的邮箱请求后,判断此邮件是否为本地邮件,若是,直接投送到用

户的邮箱,否则向DNS(域名系统【Domain Name System】)查询远端邮件服务器的MX记录,并建立与远端接受SMTP之间的一条双向通道,此后SMTP命令由

发送SMTP发出,由接受SMTP接收,应答则反向传输,一旦通道建立,SMTP发送者发送MAIL命令指明邮件发送者。如果SMTP接受者可以接收邮件,则返回OK

应答。SMTP发送者再发出RCPT命令确认邮件是否收到,如果SMTP接收者接收,则返回OK应答。如果不能接收到,着发出拒绝接收应答(但不终止整个邮件的

操作),双方将如此反复多次,当接收者收到全部邮件后会接收特别的序列,如果接收者成功处理了邮件,返回OK应答。

4:SMTP的连接和发送过程

(a)建立TCP连接

(b)客户端发送HELO命令以标识发件人自己的身份,然后客户端发送MAIL命令;

         服务器端正希望以OK作为响应,表明准备接收

(c)客户端发送RCPT命令,以标识该电子邮件的计划接收人,可以有多个RCPT行;

         服务器端则表示是否愿意为收件人接收邮件

(d)协商结束,发送邮件,用命令DATA发送

(e)以.表示结束输入内容一起发送出去

(f)结束此次发送,用QUIT命令退出

5:java中发送邮件demo。

java官方提供了对电子邮件协议封装的java类库,就是javaMail,但并没有包含到标准的jdk中,需要自己去下载。Adress:java邮件协议封装类库下载

创建一封简单的电子邮件的过程:

  1. 首先创建一个邮件对象(MimeMessage)对象。
  2. 设置邮件对象的发送人,收件人,抄送人,密送人。
  3. 设置邮件的主题theme(标题)。
  4. 设置邮件的正文content(内容)。
  5. 设置发送时间sendTime(时间)。
  6. 保存到本地。

DEMO详情:

package javaMailDemo.email;


import java.util.Date;
import java.util.Properties;


import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;


public class MailTo {
/**
* 发件人的邮箱或者密码替换为自己的邮箱,密码。

* 某些邮箱服务器为了增加邮箱本身密码的安全性,给SMTP客户端设置了独立密码(有的邮箱称之为“授权码”),
* 对于开启了邮箱的独立密码(授权码)的邮箱,这里的邮箱密码必须使用独立密码(授权码)。

* */


public static String sendEmailAccount = "*********@qq.com";//(发送人邮箱地址)


public static String sendAuthCodeOrPassword = "*****************";//(这里是密码或者授权码)


/**
* 发件人的SMTP服务器地址,必须准确,不同邮件服务器地址不同,一般(只是一般,不是绝对的)格式为:smtp:xxx.com。
* 例如网易163邮箱的SMTP 服务器地址为:smtp.163.com

* */
public static String sendEmailSMTPHost = "smtp.qq.com";//163邮箱为:smtp.163.com




/**
* 收件人邮箱(替换为自己知道的有效的邮箱就行)
* */
public static String receptEmailAccount = "2172622578@qq.com";




//主函数
public static void main(String [] args) throws Exception{
/**
* 首先创建参数配置,用于连接邮件服务器的参数配置
* */
Properties properties = new Properties();


properties.setProperty("mail.transport.protocol", "smtp");//使用的协议为smtp
properties.setProperty("mail.smtp.host", sendEmailSMTPHost);//发件人邮箱的SMTP服务器地址
properties.setProperty("mail.smtp.auth", "true");//需要请求认证


/** 某些邮箱服务器要求 SMTP 连接需要使用 SSL 安全认证 (为了提高安全性, 邮箱支持SSL连接, 也可以自己开启),
*如果无法连接邮件服务器, 仔细查看控制台打印的 log, 如果有有类似 “连接失败, 要求 SSL 安全连接” 等错误,
*打开下面 的注释代码, 开启 SSL 安全连接。
*/


// SMTP 服务器的端口 (非 SSL 连接的端口一般默认为 25, 可以不添加, 如果开启了 SSL 连接,
// 需要改为对应邮箱的 SMTP 服务器的端口, 具体可查看对应邮箱服务的帮助,
// QQ邮箱的SMTP(SLL)端口为465或587, 其他邮箱自行去查看)
final String smtpPort = "465";
properties.setProperty("mail.smtp.port", smtpPort);
properties.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
properties.setProperty("mail.smtp.socketFactory.fallback", "false");
properties.setProperty("mail.smtp.socketFactory.port", smtpPort);


/**
* 根据配置创建会话对象,用于和邮件服务器交互
*/
javax.mail.Session session = javax.mail.Session.getDefaultInstance(properties);
session.setDebug(true);//设置debug模式,可以查看详细的发送log


/**
* 创建一封简单的文本邮件
*/
MimeMessage message = createMimeMessage(session, sendEmailAccount, receptEmailAccount);


/**
* 根据session获取邮件传输对象
*/
Transport transport = session.getTransport();


/**
* 使用邮箱账号和密码或(邮箱账号和独立密码【授权码】)连接邮件服务器,这里认证的邮箱必须与message中的发件人一致否则报错。


*/
transport.connect(sendEmailAccount, sendAuthCodeOrPassword);


/**
* 发送邮件,发到所有邮件的收件地址,message.getAllRecipients()获取到的是创建邮件对象时添加的所有邮件人,抄送人,密送人。
*/
transport.sendMessage(message, message.getAllRecipients());


/**
* 关闭连接
*/
transport.close();


}




/**
* 创建邮件函数
* @param session
* @param sendMail
* @param receiveMail
* @return
* @throws Exception
*/
public static MimeMessage createMimeMessage(javax.mail.Session session, String sendMail, String receiveMail) throws Exception{
//创建一封邮件
MimeMessage message = new MimeMessage(session);


//From:发件人
message.setFrom(new InternetAddress(sendMail,"DDD306CDIO","UTF-8"));


//To :收件人(可以增加多个收件人,抄送、密送)
message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(receiveMail,"DDD306","UTF-8"));


//Subject :邮件主题
message.setSubject("DDD306CDIO测试邮件");


//Content :邮件正文(可以使用html标签)
message.setContent("XX用户你好, DDD306CDIOXXXXX活动,希望你能参加", "text/html;charset=UTF-8");


//设置发送时间
message.setSentDate(new Date());


//保存设置(这一句很重要)
message.saveChanges();


return message;


}

 

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是原来的你吗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值