java邮件发送

电子邮箱的概念


电子邮箱其实就是分为邮箱服务器和电子邮箱客户端

邮箱服务器:主要是用于接收并转发邮件,类似于邮局,把用户的邮件接收过来,然后转 发到邮件接收者的电子邮箱中。
                      服务器地址:一般是 smtp.xxx.com,比如163邮箱是smtp.163.com,qq邮箱是smtp.qq.com。

邮箱客户端:就是每个账号在服务器中开辟的一小段空间。用户在服务器中申请一个账号,服务器就会为这个账号分配一小段空                       间,然后用户使用这个账号和空间,进行存储邮件和发送邮件。 客户端可以是可以只安装在电脑上(C/S)的也可                       以是网页形式(B/S)的。

 

邮箱协议

  • SMTP   :发送邮件协议

        端口号:22
        定义了邮件在客户端软件和SMTP服务器,或者在SMTP服务器之间的传输格式和规范

 

  • POP3/IMAP/POP :接收邮件协议

       端口号:110
       定义了邮件在POP3服务器和客户端软件之间的传输格式和规范
       接收和发送邮件可以是两个服务器,也可以是一个服务器,大公司一般是分离的。


发送用的协议是SMTP
接收用的协议可能是POP3或者IMAP,或者两者混合用。
作用:约束了邮件在网络传输的过程中的传输格式

 

 

邮件发送流程图

 

  1. 首先通过smtp协议连接到Smtp服务器,然后发送一封邮件给网易的邮件服务器
  2. 网易分析发现需要去QQ的邮件服务器,通过smtp协议将邮件转投给QQ的Smtp服务器
  3. QQ将接收到的邮件存储在545646733@qq.com这个邮件账号的空间中
  4. 再通过Pop3协议连接到Pop3服务器收取邮件
  5. 从545646733@qq.com这个邮件账号的空间中取出邮件
  6. Pop3服务器将取出来的邮件送出去

 

 

java邮件发送

概述:邮件在实际项目中的应用非常广泛,比如:对用户注册、登录发送邮件进行验证, 对当天生日的员工发邮件祝福.......

使用java发送邮件需要使用到两个包 :

  • mail.jar  
  • activation.jar

   可以通过repository 仓库下载:
   https://mvnrepository.com/artifact/javax.mail/mail
   https://mvnrepository.com/artifact/javax.activation/activation

 

如果使用maven也可以直接导入commons-email  依赖(内部会自动导入mail.jar  和activation.jar包 )

<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-email  -->
<dependency>
  <groupId>org.apache.commons</groupId>
  <artifactId>commons-email</artifactId>
  <version>1.4</version>
</dependency>   

 

注意:下面的那段发送电子邮件的代码中所用到的一些类,是导入的下面这些邮件包中的类,就比如说session这个类,并不是咱们平常用的HttpServletSession,而是mail包中的。
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

 

开启邮箱stmp 服务

想要在java项目中使用java代码发送电子邮件,那么你的发件人 的邮箱必须是开通了stmp服务。至于为什么是stmp服务而不是别的服务,因为我在上面使用的stmp邮件协议。所以需要开通该服务。

  1. 登录发件人邮箱,我们这里使用的是qq邮箱,点击设置/账户

2.开启服务,会弹出这个授权码(记住他,我们一会要使用到)

 

 

-----------------------------------开始发送邮件啦 ----------------------------------------------------

 

邮件发送工具类 (发送邮件的工具类,不用刻意去记,用滴时候 copy 就好啦)

import java.util.Properties;

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

public class MailUtil {

	
  /* 邮件发送
   * path是指你要发给哪个邮箱号,title是指你的邮件的标题。msg是指你的邮件的内容。
   */
  public static void sendEmail(String path,String title, String msg) {

    // 创建Properties 类用于记录邮箱的一些属性
    Properties properties = new Properties();
    properties.put("mail.transport.protocol", "smtp");// 连接协议,即:邮件协议
    properties.put("mail.smtp.host", "smtp.qq.com");// 设置qq邮件服务器
    properties.put("mail.smtp.port", 465);// 端口号 :qq邮箱给出的两个端口号  587和465
    properties.put("mail.smtp.auth", "true");
    properties.put("mail.smtp.ssl.enable", "true");// 设置是否使用ssl安全连接 ---一般都使用 (如果使用465端口,必须开启ssl协议)

    properties.put("mail.debug", "true");// 设置是否显示debug信息 true 会在控制台显示相关信息
    // 得到回话对象
    Session session = Session.getInstance(properties);
    // 获取邮件对象
    Message message = new MimeMessage(session);
	        
    try {
       // 设置发件人邮箱地址
       message.setFrom(new InternetAddress("5479xxxx@qq.com"));
       // 设置收件人邮箱地址
       message.setRecipients(Message.RecipientType.TO, new InternetAddress[]{new InternetAddress(path)});
       //message.setRecipient(Message.RecipientType.TO, new InternetAddress("xxx@qq.com"));//一个收件人
       // 设置邮件标题
       message.setSubject(title);
       // 设置邮件内容
       message.setText(msg);
       // 得到邮差对象
       Transport transport = session.getTransport();
       // 连接自己的邮箱账户
       transport.connect("5479xxxxxx@qq.com", "xxxxxxxxxxxx");// 密码为QQ邮箱开通的stmp服务后得到的客户端授权码(你可以进入你的邮箱的设置里面查看)
       // 发送邮件
       transport.sendMessage(message, message.getAllRecipients());
       transport.close();
       }catch (Exception e) {
        	System.out.println("邮件发送失败");
	}
  }

}

发送邮件

public static void main(String[] args) {
		
	MailUtil.sendEmail("xxxxxx@163.com","hello 你好","见到你很高兴");
}

注意】有可能填写的收件人地址,发件人地址等信息都正确了,控制台也打印了正确的信息,但是在收件箱就是收不到信息。这是因为可能收件箱服务器拒收了你发的邮件(比如认为你的邮件是广告),这时候可能在垃圾箱里能找到,可能找不到。解决办法是重复的邮件内容不要多次发送,或者更换收件箱试试

 

内容转载自:

https://blog.csdn.net/weixin_44142032/article/details/89319167
https://blog.csdn.net/qq_41151659/article/details/96475739

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值