资讯详情

Java中的邮件发送——Java Email

电子邮件

电子邮件是一种通过电子手段提供信息交换的通信方式,是互联网应用最广泛的服务。通过网络电子邮件系统,用户可以非常低的价格(无论他们发送到哪里,他们只需要支付网络费用),非常快的方式(可以在几秒钟内发送到世界上任何指定的目的地),并联系世界上任何角落的网络用户。

电子邮件可以是文本、图像、声音和其他形式。同时,用户可以获得大量的免费新闻和特殊邮件,并轻松实现轻松的信息搜索。电子邮件的存在极大地促进了人与人之间的沟通,促进了社会的发展。

邮件协议

SMTP协议

SMTP 的全称是“Simple Mail Transfer Protocol即简单的邮件传输协议。它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。SMTP 协议属于 TCP/IP 协议簇帮助每台计算机在发送或中转信件时找到下一个目的地。SMTP 服务器遵循 SMTP 发送协议邮件服务器。 SMTP 简单地说,认证需要在提供账户名和密码后才能登录 SMTP 服务器,这使得垃圾邮件的传播者没有机会。 增加 SMTP 认证的目的是防止用户被垃圾邮件入侵。

POP3协议

POP3是Post Office Protocol 简称3,即邮局协议的第三个版本,规定如何连接个人电脑Internet下载电子邮件的邮件服务器和电子协议。这是因特网电子邮件的第一个离线协议标准,POP3允许用户将电子邮件从服务器存储到本地主机(即自己的计算机),并删除电子邮件服务器上的电子邮件POP3服务器遵循POP接收电子邮件邮件的协议接收邮件服务器。

IMAP协议

IMAP全称是Internet Mail Access Protocol,即交互式电子邮件访问协议,它与POP类似邮件访问标准协议之一。不同的是,它打开了IMAP之后,您在电子邮件客户端收到的电子邮件仍然保留 在服务器上,客户端上的操作会反馈给服务器,比如删除邮件、标记已读等。,服务器上的邮件也会做相应的动作。因此,无论是从浏览器还是客户端登录邮箱 软件登录邮箱,看到的邮件和状态一致。

POP3协议与IMAP两者都是接收协议,那么两者有什么区别呢?

POP3协议允许电子邮件客户下载服务器上的电子邮件,但客户操作(如移动电子邮件、标记已读等)不会反馈给服务器,如通过客户收集电子邮件中的三封电子邮件并移动到其他文件夹,邮箱服务器上的邮件没有同时移动 。

IMAP提供webmail 对于与电子邮件客户端的双向通信,客户端的操作将反馈给服务器。对于电子邮件的操作,服务器上的电子邮件也会做出相应的动作。

实现邮件发送代码

每次发邮件前都会创建Session这里可以定义一个连接JavaMailUtils每次创建连接时,只需调用工具类createSession()方法,不需要经常写重复代码。作者使用网易邮箱。在发送之前,为了密码的安全,他可以在官方网站上申请授权密码。您可以在这里使用授权密码。在创建连接时使用它Properties对象,本质上是一个map集合可以有效地保存服务器的信息。比如主机名,主机端口号,是否需要用户认证,是否需要启用TLS加密等。

package com.fulain.demo;  import java.util.Properties;  import javax.mail.Authenticator; import javax.mail.PasswordAuthentication; import javax.mail.Session;  public class JavaMailUtils {    public static Session createSession() {   // SMTP服务器地址   String smtp = "smtp.163.com";    // 邮箱账号和密码(授权密码)   String userName = "";   String password = "";    // SMTP连接信息的服务器   Properties props = new Properties();   props.put("mail.smtp.host", smtp); // SMTP主机名   props.put("mail.smtp.port", 25); // 主机端口号   props.put("mail.smtp.auth", "true"); // 是否需要用户认证   props.put("mail.smtp.starttls.enable", "true"); // 启用TLS加密    // 创建Session   // 参数1 : SMTP连接服务器的信息   // 参数2 : 用户认证对象(Authenticator()接口匿名实现类)   Session session = Session.getInstance(props, new Authenticator() {    @Override    protected PasswordAuthentication getPasswordAuthentication() {     return new PasswordAuthentication(userName, password);    }   });    // 打开调试模式   session.setDebug(true);    return session;  } } 

发送普通邮件

当我们发送时,我们需要构建一个Message对象,setFrom()指定发件人的方法,setRecipient()指定收件人的方法,RecipientType枚举类提供常量,RecipientType.TO代表收件人,RecipientType.CC代表抄送人,setSubject()设置标题的方法,setText()方法表示设置文本内容。然后调用Transport.send(Message)可完成发送:绝大多数邮件服务器要求发送方地址与登录用户名一致,否则发送将失败。

package com.fulain.demo;  import javax.mail.Message.RecipientType; import javax.mail.MessagingException; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.AddressException; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage;  public class Demo02 {  public static void main(String[] args) {      try {    // 1.创建session会话    Session session = JavaMailUtils.createSession();        // 2.发送    MimeMessage msg = new MimeMessage(session); // 传入session    msg.setFrom(new InternetAddress("发件人邮箱")); // 发件人    msg.setRecipient(RecipientType.TO, new InternetAddress("收件人邮箱")); // 收件人     msg.setRecipient(RecipientType.CC, new InternetAddress("抄送人邮箱")); // 抄送人    msg.setSubject("这是测试邮件" , "utf-8"); // 标题    msg.setText("下雨天要注意保暖,好好吃饭!","utf-8"); // 正文        // 3,发送邮件    Transport.send(msg);          } catch (AddressException e) {    // TODO Auto-generated catch block    e.printStackTrace();   } catch (MessagingException e) {    // TODO Auto-generated catch block    e.printStackTrace();   }     } } 

带附件发送邮件

发送附件时,应构建一个Multipart对象。一个Multipart可以添加多个对象BodyPart,其中第一个BodyPart是文本,即邮件正文,后面是BodyPart是附件。BodyPart依靠setContent()决定添加的内容,使用setContent("...", "text/html;charset=utf-8")添加HTML文本。添加附件时,需要设置文件名(不一定与真实文件名一致)并添加一个DataHandler(),使用Files工具类的readAllBytes()方法可以更方便地从本地磁盘中读取文件读取字节数据,并将其传输到文件中MIME类型(application/octet-stream), 最后,通过setContent()把Multipart添加到Message中,可发送。

package com.fulain.demo;  import javax.mail.Message.RecipientType; import java.io.FileInputStream; import java.io.IOExeption;
import java.nio.file.Files;
import java.nio.file.Paths;

import javax.activation.DataHandler;
import javax.mail.BodyPart;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.util.ByteArrayDataSource;


public class Demo03 {
	public static void main(String[] args) {
		
		try {
			// 1.创建session会话
			Session session = JavaMailUtils.createSession();
			
			// 2.发送
			MimeMessage msg = new MimeMessage(session); // 传入session
			msg.setFrom(new InternetAddress("发件人邮箱地址")); // 发件人
			msg.setRecipient(RecipientType.TO, new InternetAddress("收件人邮箱地址")); // 收件人 
			
			msg.setSubject("这是一份测试邮件" , "utf-8"); // 标题
			
			// 3.邮件内容“复合”对象
			Multipart multipart = new MimeMultipart();
			
			// 正文
			BodyPart textPart = new MimeBodyPart();
			// 参数1 : 正文类型
			// 参数2 : 内容类型;字符编码集
			textPart.setContent("大小姐<b>驾到</b>,统统闪开!来一发子弹吗?","text/html;charset=utf-8");
			
			// 附件
			BodyPart imagePart = new MimeBodyPart();
			imagePart.setFileName("sweet.jpg");
			// 数据处理对象(读取附件文件从本地磁盘进行读取)
			imagePart.setDataHandler(
					new DataHandler(
							new ByteArrayDataSource(
									Files.readAllBytes(Paths.get("d:\\test\\image\\tangcuyv.jpg")),
									"application/octet-stream")));
			
			// 添加至邮件内容
			multipart.addBodyPart(textPart); // 添加正文
			multipart.addBodyPart(imagePart); // 添加附件
			
			// 设置邮件内容
			msg.setContent(multipart);

			// 4.发送邮件
			Transport.send(msg);
			
		
		} catch (AddressException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (MessagingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
}

发送内嵌图片的HTML邮件

        如果需要在HTML邮件中内嵌图片,可以选择在邮件中加入<img src=" cid=附件别名">,附件别名通过.setHeader("Content-ID", "<别名>")方法设置。

            // 邮件正文部分
			BodyPart textBodyPart = new MimeBodyPart();
			StringBuilder body = new StringBuilder();
			body.append("<h1>托尼史塔克</h1>");
			body.append("<img src=\"cid:tony\"/>");
			textBodyPart.setContent(body.toString(), "text/html;charset=utf-8");
			
			// 邮件附件部分
			BodyPart imageBodyPart = new MimeBodyPart();
			imageBodyPart.setFileName("iron_Man.jpg");
			imageBodyPart.setDataHandler(
					new DataHandler(
							new ByteArrayDataSource(
									Files.readAllBytes(Paths.get("d:\\test\\image\\me2.jpg")), 
									"application/octet-stream")));
			imageBodyPart.setHeader("Content-ID", "<tony>");
			

标签: x4me2接近传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

 锐单商城 - 一站式电子元器件采购平台  

 深圳锐单电子有限公司