JavaMail-利用Java完成邮件发送(包括附件)

抛开电子邮件不谈,日常生活中我们想要发送信件,邮件的时候需要经历这些步骤:

首先,我们的家门口都有一个信箱,我们将贴好邮票的信件放入信箱,这时候邮局看到邮箱中的信件之后,盖上出发的印章发往目的地的邮局,目的地的邮局收到信件之后,再盖上一个到达的印章发往目的地的信箱里面。

通过上面所说的,我们就可以将电子邮件的发送过程联想出来,电子邮件是通过用户电脑上的邮件软件发送到邮件服务器上,中途可能经过多个邮件服务器的中转,最终到达收件方的邮件软件用于接收。

发送邮件前的准备:

准备jar包

javax.mail-1.6.2.jar

准备SMTP登录信息:

常用邮件服务商的SMTP信息:
qq邮箱:SMTP服务器是:smtp.qq.com、端口是465/587
163邮箱:SMTP服务器是:smtp.163.com、端口是465
126邮箱:SMTP服务器是:smtp.126.com、端口是465/994

这些准备信息我封装到了一个JavaMailUtils类中(userName是网易邮箱账号):

import java.util.Properties;

import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;

//工具类
public final class JavaMailUtils {
	private JavaMailUtils() {	
	}
	
	public static Session createSession() {
		//邮箱账号信息
		String userName = "m13152448308_1@163.com";
		String password = "OBSHGUTWPOLKRGVZ";
				
		//SMTP服务器连接信息
		Properties props = new Properties();
		props.put("mail.smtp.host","smtp.163.com"); //SMTP主机名
		props.put("mail.smtp.prot","465"); //主机端口号
		props.put("mail.smtp.auth","true"); //是否需要用户认证
		props.put("mail.smtp.starttls.enable","true"); //启用TLS加密
				
		Session session = Session.getInstance(props,new Authenticator() {
			@Override
			protected PasswordAuthentication getPasswordAuthentication() {
				return new PasswordAuthentication(userName, password);
			}
		});
		
		session.setDebug(true);
		
		return session;
	}
}

将准备信息以键值对的方式存入props对象里,在下面创建一个session会话对象,调用getInstance方法将准备信息和用户名密码传进去,注意Authenticator在这里是一个匿名子类的存在,需要重写抽象类中的抽象方法。

做好了以上的准备工作,我们重新创建一个类,用于发送和接受邮件。


public class Demo02 {

	public static void main(String[] args) {
		
		try {
			//1.创建Session会话
			Session session = JavaMailUtils.createSession();
			
			//2.创建邮件对象
			MimeMessage message = new MimeMessage(session);
			message.setSubject("学习JavaMail"); //设置邮件标题
			message.setText("从入门到<b>放弃</b>","utf-8","html"); //设置邮件正文
			message.setFrom(new InternetAddress("1315***1@163.com")); // 发件人
			message.setRecipient(RecipientType.TO, new InternetAddress("1252303367@qq.com")); //收件人
			
			//发送邮件
			Transport.send(message);
		} catch (MessagingException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}
}

这样我们就完成了简单的邮件发送。(注意:邮件正文中可以包含html标签)

在上面的基础上我们知道RecipientType.TO是给主要收件人发送邮件,我们除此之外还可以通过RecipientType.CC抄送多个收件人。

抄送:

public class Demo02 {

	public static void main(String[] args) {
		
		try {
			//创建Session会话
			Session session = JavaMailUtils.createSession();
			
			//创建邮件对象
			MimeMessage message = new MimeMessage(session);
			message.setFrom(new InternetAddress("m13152448308_1@163.com")); // 发件人
			message.setRecipient(RecipientType.TO, new InternetAddress("1252303367@qq.com")); //收件人
			message.setRecipients(RecipientType.CC, new InternetAddress[] {new InternetAddress("2436120035@qq.com") , new InternetAddress("1252303367@qq.com")}); // 抄送
			message.setSubject("学习JavaMail");
			
			//正文
			BodyPart textpart = new MimeBodyPart();
			StringBuilder contain = new StringBuilder();
			contain.append("<h3>刀剑神域</h3>");
			contain.append("<p>非常好看</p>");
			contain.append("<img src=\"cid:lmy\"/>");
			textpart.setContent(contain.toString(),"text/html;charset=utf-8");
			
			// 附件
			BodyPart filepart = new MimeBodyPart();
			filepart.setFileName("曹桑");
			
			//上传附件文件
			filepart.setDataHandler(
					new DataHandler(
							new ByteArrayDataSource(
									Files.readAllBytes(
											Paths.get("C:\\Users\\lenovo\\Desktop\\cbx\\douban\\cao\\1.jpg")),"application/octet-stream")));
			filepart.setHeader("Content-ID", "lmy");
			
			// 将正文+附件组装成multipart对象
			Multipart multipart = new MimeMultipart();
			multipart.addBodyPart(textpart);
			multipart.addBodyPart(filepart);
			
			//将multipart对象放入邮箱
			message.setContent(multipart);
			//发送邮件
			Transport.send(message);
		} catch (MessagingException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}
}

  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,关于使用JavaMail发送和读取邮件的问题,我可以给你一些简单的介绍。 首先,你需要导入JavaMail的jar包,然后创建Session对象,设置邮件服务器的配置信息和账号授权信息。例如: ```java Properties props = new Properties(); props.setProperty("mail.smtp.host", "smtp.example.com"); props.setProperty("mail.smtp.auth", "true"); Session session = Session.getDefaultInstance(props, new Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication("your_username", "your_password"); } }); ``` 然后,你可以使用Message对象来创建邮件内容,并使用Transport对象将邮件发送出去。例如: ```java Message message = new MimeMessage(session); message.setFrom(new InternetAddress("sender@example.com")); message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("recipient@example.com")); message.setSubject("Testing JavaMail"); message.setText("Hello World!"); Transport.send(message); ``` 如果你需要读取邮件,也可以使用JavaMail提供的API。你需要连接到邮件服务器,打开收件箱,并遍历所有邮件。例如: ```java Store store = session.getStore("pop3"); store.connect("pop3.example.com", "your_username", "your_password"); Folder inbox = store.getFolder("INBOX"); inbox.open(Folder.READ_ONLY); Message[] messages = inbox.getMessages(); for (int i = 0; i < messages.length; i++) { Message message = messages[i]; System.out.println("Subject: " + message.getSubject()); } inbox.close(false); store.close(); ``` 这只是JavaMail的简单使用方式,如果你需要更多的功能,可以参考JavaMail的官方文档或者其他相关的教程。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值