JavaMail邮件发送相关案例


前言

今天在课堂上学习了JavaMail,它经常被用于邮件的发送,在以前邮件被广泛的使用,即使是现在邮件也应用在很多场景,所以我们一起来学习一下JavaMail的基本邮件发送的案例。

一、JavaMail是什么?

JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口。它是Sun发布的用来处理email的API。它可以方便地执行一些常用的邮件传输。我们可以基于JavaMail开发出类似于Microsoft Outlook的应用程序。

二、建立邮件服务器

在国内,我们常用的邮箱有网易、新浪、QQ邮箱等。这些基本都是主流。他们有这不同的邮件服务器。
我以网易163邮箱为例:

首先要将POP3/SMTP服务打开,然后得到并复制授权码,再得到SMTP网址。如下图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
作好以上准备后,还需要的java环境:

  • jdk1.6以上

  • javax.mail-1.6.2.jar

三.发送邮件

3.1前期准备

导入jar包
在这里插入图片描述
创建一个JavaMailUtils类,用来连接服务器,类定义为final,构造方法用private修饰,创建一个creatSession方法,方法中创建一个Properties对象,调用Properties对象的put方法将SMTP主机名,主机端口号,是否需要用户认证,启用TLS加密的信息封装进去。代码如下:

Properties props = new Properties();
		props.put("mail.smtp.host", "smtp.163.com");// SMTP主机名
		props.put("mail.smtp.port", "25");// 主机端口号
		props.put("mail.smtp.auth", "true");// 是否需要用户认证
		props.put("mail.smtp.starttls.enable", "true");// 启用TLS加密

然后创建一个Session对话,通过getInstance(props,Authenticator)方法将props和密码封装进Seesion中,其中要重写Authenticator中的getPasswordAuthentication,定义两个String类型的账户名和密码,return账户名和密码,以此建立与服务器的连接,最终return Session。代码如下:

String userName = "177xxxx4770@163.com";
String password = "QDBJPWxxxxVNHHSZ";
Session session = Session.getInstance(props, new Authenticator() {
	@Override
	protected PasswordAuthentication getPasswordAuthentication() {
		return new PasswordAuthentication(userName, password);
	}
});
return session;

有了这个类后,就可以正式开始邮件的发送了。

3.2 单个邮件发送

通过刚创建的JavaMailUtilscreateSession方法,创建一个Session对象,再创建一个MimeMessage对象,将session对象放入构造方法中,然后通过message对象的setForm设置发件人账号,setRecipient设置收件人信息,其中setRecipient(RecipientType.TO,new InternetAddress(“2436xxxx35@qq.com”))的第一个参数代表发送给一个联系人,通过message的setSubject方法设置邮件标题,setText设置正文内容,最终使用Transport.send(message)发送邮件。代码如下:

Session session = JavaMailUtils.createSession();
MimeMessage message = new MimeMessage(session);
try {
			message.setFrom(new InternetAddress("177xxxx4770@163.com"));
			message.setRecipient(RecipientType.TO, new InternetAddress("243xxxx35@qq.com"));
			message.setSubject("CXK");
			message.setText("1");
			Transport.send(message);
			} catch (MessagingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
	 }

结果如图
在这里插入图片描述

3.2 单个邮件发送,带附件

要在邮件中带附件,就不能直接使用message.setText()方法,而是要构造一个Multipart对象:

//添加text:
Multipart multipart = new MimeMultipart();
BodyPart textpart = new MimeBodyPart();
textpart.setContent(body,"text/html;charset=utf-8");//可以有超文本
multipart.addBodyPart(textpart);
//添加image:
BodyPart imagepart = new MimeBodyPart();
imagepart.setFileNmae(附件名称);
imagepart.setDataHandler(new DataHandler(new ByteArrayDataSource(文件输入流,"application/octet-stream"));
multipart.addBodyPart(imagepart);
message.setContent(multipart);

一个multipart对象可以添加若干个BodyPart,其中第一个BodyPart是文本,即邮件正文,后面的BodyPart是附件。如添加文本,可以用setContent(“…”,“text/plain;charset=utf-8”),或者将第二个参数设置成text/html;charset=utf-8即可添加HTML文本。如果添加附件,需要设置文件名(不一定和真实文件名一致),并且添加一个DataHandler(),传入文件的MIME类型。二进制文件可以用application/octet-stream,Word文档则是application/msword。最后通过setContent()把Multipart添加到Mesage中,即可发送。
效果如图:
在这里插入图片描述

3.2 抄送邮件,带内嵌图片

想要抄送,要使用message.setRecipients()方法并且第一个参数设置为RecipientType.CC,第二个参数是new InternetAddress[]集合,集合中存放收件人的账号。代码如下:

message.setRecipients(RecipientType.CC, new InternetAddress[] { new InternetAddress("125xxxx367@qq.com"),
				new InternetAddress("243xxxx035@qq.com") });

想要发送的HTML邮件中内嵌图片,可以选择在邮件正文中加入<img src=“cid:图片名称”>,将图片的BodyPart对象用setHeader(“Content-ID”,“<图片名称>”)联系起来,最后发送。代码如下:

	BodyPart textBoby = new MimeBodyPart();
			StringBuilder content = new StringBuilder();
			content.append("<p>只因你太美<p>");
			content.append("<img src=\"cid:cxk\"/> ");
			textBoby.setContent(content.toString(), "text/html;charset=utf-8");

			BodyPart imgBoby = new MimeBodyPart();
			imgBoby.setDataHandler(new DataHandler(new ByteArrayDataSource(
					Files.readAllBytes(Paths.get("D:\\\\Study\\\\cxk.jpg")), "application/octet-stream")));
			imgBoby.setHeader("Content-ID", "cxk");

			Multipart multipart = new MimeMultipart();
			multipart.addBodyPart(textBoby);
			multipart.addBodyPart(imgBoby);
			message.setContent(multipart);

效果如图:

在这里插入图片描述


总结

以上就是今天学习的内容,本文介绍了JavaMail,发送单个邮件,抄送邮件,带附件邮件以及发送HTML邮件内嵌图片的案例,希望对您有所帮助。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
可以使用JavaMail实现批量发送邮件,主要步骤如下: 1. 配置邮件服务器信息,包括SMTP服务器地址、端口号、用户名和密码等。 2. 创建JavaMail会话对象,可以通过Session.getDefaultInstance()方法获取默认会话对象,也可以自己创建Session对象。 3. 创建邮件对象,包括发件人、收件人、主题、内容等。 4. 创建多个邮件对象,将它们添加到一个邮件列表中。 5. 创建邮件传输对象Transport,连接邮件服务器并发送邮件列表。 下面是一个简单的示例代码: ``` import java.util.*; import javax.mail.*; import javax.mail.internet.*; public class MailSender { public static void main(String[] args) throws Exception { String host = "smtp.example.com"; String username = "your_username"; String password = "your_password"; String from = "your_email@example.com"; String subject = "Test Email"; String body = "This is a test email."; Properties props = new Properties(); props.put("mail.smtp.host", host); props.put("mail.smtp.auth", "true"); Session session = Session.getDefaultInstance(props, new javax.mail.Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(username, password); } }); List<String> toList = new ArrayList<String>(); toList.add("[email protected]"); toList.add("[email protected]"); toList.add("[email protected]"); List<Message> messageList = new ArrayList<Message>(); for (String to : toList) { Message message = new MimeMessage(session); message.setFrom(new InternetAddress(from)); message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to)); message.setSubject(subject); message.setText(body); messageList.add(message); } Transport transport = session.getTransport("smtp"); transport.connect(); for (Message message : messageList) { transport.sendMessage(message, message.getAllRecipients()); } transport.close(); } } ``` 在上面的示例代码中,我们将收件人地址保存在一个列表中,然后创建多个邮件对象,将它们添加到一个邮件列表中,最后使用Transport对象发送邮件列表。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值