JavaMail邮件开发

(api + 配置)

 

开发中,邮件的应用?

         -à 注册,填写生日;  后期系统会自动发送生日祝贺

-à 发货,发货提醒!邮件提醒!

邮件:

         1.发邮件;【程序中如何发邮件!】

         2.收邮件;【很多客户端工具, foxmail 】

 

邮件开发准备:

准备工作, 环境搭建:

1. 本地搭建一个邮件服务器

  -à 易邮服务器,eyoumailserversetup.exe

2. 新建邮箱账号

  张三给李四发邮件。

  步骤1:

         新建域名: 工具, 服务器设置, 单域名框中输入 itcast.com

  步骤2:

         新建邮箱账号:  zhangsan@itcast.com

                  lisi@itcast.com

3. 安装foxmail

         配置邮件发送服务器(smtp):  localhost     25

       邮件接收服务器(pop3):  localhost     110

         再新建账号,就可以接收邮件了!


邮件开发之普通邮件:

JavaMail开发,先引入jar文件:

         activation.jar   【如果使用jdk1.6或以上版本,可以不用这个jar文件】

         mail.jar       【邮件发送核心包】

package cn.itcast.mail;

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

import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeMessage.RecipientType;

import org.junit.Test;

/**
 * 1. 发送一封普通邮件
 * @author Jie.Yuan
 *
 */
public class App_1SendMail {

	@Test
	public void testSend() throws Exception {
		
		//0. 邮件参数
		Properties prop = new Properties();
		prop.put("mail.transport.protocol", "smtp");	// 指定协议
		prop.put("mail.smtp.host", "localhost");		// 主机   stmp.qq.com
		prop.put("mail.smtp.port", 25);					// 端口
		prop.put("mail.smtp.auth", "true");				// 用户密码认证
		prop.put("mail.debug", "true");					// 调试模式
		
		//1. 创建一个邮件的会话
		Session session = Session.getDefaultInstance(prop);
		//2. 创建邮件体对象 (整封邮件对象)
		MimeMessage message = new MimeMessage(session);
		//3. 设置邮件体参数: 
		//3.1 标题
		message.setSubject("我的第一封邮件	");
		//3.2 邮件发送时间
		message.setSentDate(new Date());
		//3.3 发件人
		message.setSender(new InternetAddress("zhangsan@itcast.com"));
		//3.4 接收人
		message.setRecipient(RecipientType.TO, new InternetAddress("lisi@itcast.com"));
		//3.5内容
		//message.setText("你好,已经发送成功!  正文....");  // 简单纯文本邮件
		// 邮件中含有超链接
		//message.setText("<a href='#'>百度</a>");
		message.setContent("<a href='#'>百度</a>", "text/html;charset=UTF-8");
		
		message.saveChanges();   // 保存邮件(可选)
		
		//4. 发送
		Transport trans = session.getTransport();
		trans.connect("zhangsan", "123");
		// 发送邮件
		trans.sendMessage(message, message.getAllRecipients());
		trans.close();
	}
}
Junit测试信息:

DEBUG: JavaMail version 1.4.1
DEBUG: not loading file: C:\myclipse\binary\com.sun.java.jdk8.win32.x86_64_1.8.0.v112\jre\lib\javamail.providers
DEBUG: java.io.FileNotFoundException: C:\myclipse\binary\com.sun.java.jdk8.win32.x86_64_1.8.0.v112\jre\lib\javamail.providers (系统找不到指定的文件。)
DEBUG: !anyLoaded
DEBUG: not loading resource: /META-INF/javamail.providers
DEBUG: successfully loaded resource: /META-INF/javamail.default.providers
DEBUG: Tables of loaded providers
DEBUG: Providers Listed By Class Name: {com.sun.mail.smtp.SMTPSSLTransport=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Sun Microsystems, Inc], com.sun.mail.smtp.SMTPTransport=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc], com.sun.mail.imap.IMAPSSLStore=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Sun Microsystems, Inc], com.sun.mail.pop3.POP3SSLStore=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Sun Microsystems, Inc], com.sun.mail.imap.IMAPStore=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Sun Microsystems, Inc], com.sun.mail.pop3.POP3Store=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Sun Microsystems, Inc]}
DEBUG: Providers Listed By Protocol: {imaps=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Sun Microsystems, Inc], imap=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Sun Microsystems, Inc], smtps=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Sun Microsystems, Inc], pop3=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Sun Microsystems, Inc], pop3s=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Sun Microsystems, Inc], smtp=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]}
DEBUG: successfully loaded resource: /META-INF/javamail.default.address.map
DEBUG: !anyLoaded
DEBUG: not loading resource: /META-INF/javamail.address.map
DEBUG: not loading file: C:\myclipse\binary\com.sun.java.jdk8.win32.x86_64_1.8.0.v112\jre\lib\javamail.address.map
DEBUG: java.io.FileNotFoundException: C:\myclipse\binary\com.sun.java.jdk8.win32.x86_64_1.8.0.v112\jre\lib\javamail.address.map (系统找不到指定的文件。)
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: trying to connect to host "localhost", port 25, isSSL false
220 ESMTP 易邮邮件服务器 5.2.2004.02.18 SMTP Service Ready
DEBUG SMTP: connected to host "localhost", port: 25

EHLO I0QZ95XPAAXLPJP
250-AUTH=LOGIN
250 AUTH LOGIN
DEBUG SMTP: Found extension "AUTH", arg "LOGIN"
DEBUG SMTP: Attempt to authenticate
AUTH LOGIN
334 VXNlcm5hbWU6
emhhbmdzYW4=
334 UGFzc3dvcmQ6
MTIz
235 OK
DEBUG SMTP: use8bit false
MAIL FROM:<zhangsan@itcast.com>
250 OK
RCPT TO:<lisi@itcast.com>
250 OK
DEBUG SMTP: Verified Addresses
DEBUG SMTP:   lisi@itcast.com
DATA
354 send the mail data, end with . 
Date: Tue, 28 Nov 2017 23:30:42 +0800 (CST)
Sender: zhangsan@itcast.com
To: lisi@itcast.com
Message-ID: <1617791695.0.1511883042518.JavaMail.Administrator@I0QZ95XPAAXLPJP>
Subject: =?GBK?B?ztK1xLXa0ru34tPKvP4J?=
MIME-Version: 1.0
Content-Type: text/html;charset=UTF-8
Content-Transfer-Encoding: quoted-printable

<a href=3D'#'>=E7=99=BE=E5=BA=A6</a>
.
250 
QUIT
221 SMTP SERVICE CLOSED


邮件开发之带图片

App_2SendWithImg.java

package cn.itcast.mail;

import java.io.File;
import java.util.Date;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
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.internet.MimeMessage.RecipientType;

import org.junit.Test;

/**
 * 带图片资源的邮件
 * @author Jie.Yuan
 *
 */
public class App_2SendWithImg {
	
	// 初始化参数
	private static Properties prop;
	// 发件人
	private static InternetAddress sendMan = null;
	static {
		prop = new Properties();
		prop.put("mail.transport.protocol", "smtp");	// 指定协议
		prop.put("mail.smtp.host", "localhost");		// 主机   stmp.qq.com
		prop.put("mail.smtp.port", 25);					// 端口
		prop.put("mail.smtp.auth", "true");				// 用户密码认证
		prop.put("mail.debug", "true");					// 调试模式
		try {
			sendMan = new InternetAddress("zhangsan@itcast.com");
		} catch (AddressException e) {
			throw new RuntimeException(e);
		}
	}

	@Test
	public void testSend() throws Exception {
		// 1. 创建邮件会话
		Session session = Session.getDefaultInstance(prop);
		// 2. 创建邮件对象
		MimeMessage message = new MimeMessage(session);
		// 3. 设置参数:标题、发件人、收件人、发送时间、内容
		message.setSubject("带图片邮件");
		message.setSender(sendMan);
		message.setRecipient(RecipientType.TO, new InternetAddress("lisi@itcast.com"));
		message.setSentDate(new Date());
		
		/***************设置邮件内容: 多功能用户邮件 (related)*******************/
		// 4.1 构建一个多功能邮件块
		MimeMultipart related = new MimeMultipart("related");
		// 4.2 构建多功能邮件块内容 = 左侧文本 + 右侧图片资源
		MimeBodyPart content = new MimeBodyPart();
		MimeBodyPart resource = new MimeBodyPart();
		
		// 设置具体内容: a.资源(图片)
		String filePath = App_2SendWithImg.class.getResource("8.jpg").getPath();
		DataSource ds = new FileDataSource(new File(filePath));
		DataHandler handler = new DataHandler(ds);
		resource.setDataHandler(handler);
		resource.setContentID("8.jpg");   // 设置资源名称,给外键引用
		
		// 设置具体内容: b.文本
		content.setContent("<img src='cid:8.jpg'/>  好哈哈!", "text/html;charset=UTF-8");
		
		related.addBodyPart(content);
		related.addBodyPart(resource);
		
		/*******4.3 把构建的复杂邮件快,添加到邮件中********/
		message.setContent(related);
		
		
		// 5. 发送
		Transport trans = session.getTransport();
		trans.connect("zhangsan", "123");
		trans.sendMessage(message, message.getAllRecipients());
		trans.close();
	}
}



 

邮件开发之带图片 + 附件

App_3ImgAndAtta.java
package cn.itcast.mail;

import java.io.File;
import java.util.Date;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
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.internet.MimeMessage.RecipientType;

import org.junit.Test;

/**
 * 3. 带图片资源以及附件的邮件
 * @author Jie.Yuan
 *
 */
public class App_3ImgAndAtta {
	
	// 初始化参数
	private static Properties prop;
	// 发件人
	private static InternetAddress sendMan = null;
	static {
		prop = new Properties();
		prop.put("mail.transport.protocol", "smtp");	// 指定协议
		prop.put("mail.smtp.host", "localhost");		// 主机   stmp.qq.com
		prop.put("mail.smtp.port", 25);					// 端口
		prop.put("mail.smtp.auth", "true");				// 用户密码认证
		prop.put("mail.debug", "true");					// 调试模式
		try {
			sendMan = new InternetAddress("zhangsan@itcast.com");
		} catch (AddressException e) {
			throw new RuntimeException(e);
		}
	}

	@Test
	public void testSend() throws Exception {
		// 1. 创建邮件会话
		Session session = Session.getDefaultInstance(prop);
		// 2. 创建邮件对象
		MimeMessage message = new MimeMessage(session);
		// 3. 设置参数:标题、发件人、收件人、发送时间、内容
		message.setSubject("带图片邮件");
		message.setSender(sendMan);
		message.setRecipient(RecipientType.TO, new InternetAddress("lisi@itcast.com"));
		message.setSentDate(new Date());
		
		/*
		 * 带附件(图片)邮件开发
		 */
		// 构建一个总的邮件块
		MimeMultipart mixed = new MimeMultipart("mixed");
		// ---> 总邮件快,设置到邮件对象中
		message.setContent(mixed);
		// 左侧: (文本+图片资源)
		MimeBodyPart left = new MimeBodyPart();
		// 右侧: 附件
		MimeBodyPart right = new MimeBodyPart();
		// 设置到总邮件块
		mixed.addBodyPart(left);
		mixed.addBodyPart(right);
		
		/******附件********/
		String attr_path = this.getClass().getResource("a.docx").getPath();
		DataSource attr_ds = new FileDataSource(new File(attr_path));
		DataHandler attr_handler = new DataHandler(attr_ds);
		right.setDataHandler(attr_handler);
		right.setFileName("a.docx");
		
		
		/***************设置邮件内容: 多功能用户邮件 (related)*******************/
		// 4.1 构建一个多功能邮件块
		MimeMultipart related = new MimeMultipart("related");
		// ----> 设置到总邮件快的左侧中
		left.setContent(related);
		
		// 4.2 构建多功能邮件块内容 = 左侧文本 + 右侧图片资源
		MimeBodyPart content = new MimeBodyPart();
		MimeBodyPart resource = new MimeBodyPart();
		
		// 设置具体内容: a.资源(图片)
		String filePath = App_3ImgAndAtta.class.getResource("8.jpg").getPath();
		DataSource ds = new FileDataSource(new File(filePath));
		DataHandler handler = new DataHandler(ds);
		resource.setDataHandler(handler);
		resource.setContentID("8.jpg");   // 设置资源名称,给外键引用
		
		// 设置具体内容: b.文本
		content.setContent("<img src='cid:8.jpg'/>  好哈哈!", "text/html;charset=UTF-8");
		
		related.addBodyPart(content);
		related.addBodyPart(resource);
		
		
		
		// 5. 发送
		Transport trans = session.getTransport();
		trans.connect("zhangsan", "888");
		trans.sendMessage(message, message.getAllRecipients());
		trans.close();
	}
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值