使用Java 实现邮件的发送

邮件的使用大多数使用者是在各类APP上实现的,而在Java中也可实现类似功能

邮件的发送过程与快递的发送十分相似,都是通过中转来完成的例如从A软件发送到B软件,则是从A的服务器中转到B的服务器的,最终才到用户手里中

我们把发送接受邮件的APP称为:MUA 处理邮件的中转服务器称为MTA 最终到达的服务器成为叫做MDA

在网络中邮件的常用协议有POP3  SMTP IMAP 

POP3:

是英特网第一个离线协议标准,POP3允许用户从服务上把邮件下载到本地主机上,同时删除保存在服务器的邮件,而POP3服务器则遵循POP3协议

SMTP:

SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式

IMAP:

因特网邮件访问协议,版本4rev1(IMAP4rev1)允许一个客户端访问和操作在一个服务器上的电子邮件。IMAP4rev1允许,以一 种功能上等效于本地文件夹的方式,操作邮箱(远程邮件文件夹)。IMAP4rev1也提供这样一个功能,一个离线客户端与服务器异步(交互)。

接下来我们以自己的邮箱给”猫人“发邮件为例 我们需要知道自己与对方的邮箱地址,首先要确定作为MTA邮件服务地址与端口号;

准备工作

我们通过Javamail  API连接到SMTP服务器上:需要准备一个Propreties对象,填入相关信息。最后获取Session实例时,打开调试模式可以看到SMTP通信的详细内容,便于调试。

具体代码如下:

public class javaSession {
	
	public static  Session creatsession() {

		//stmp服务器的地址
		String smtp = "smtp.126.com";
		
		//邮箱账户和密码
		String usename  = "cccxxx12@126.com";
		String password = "***ILVGQRZAZADGR";
		
		//stmp服务器的连接信息
		Properties propes = new Properties();
		propes.put("mail.smtp.host", smtp);//主机号
		propes.put("mail.smtp.prot","25");//主机端口
		propes.put("mail.smtp.auth", "true");//是否需要主机认证
		propes.put("mail.smtp.starttls.enable", "true");//启用tls加密
		
		
		//创建seesion
		//参数一stmp服务器的连接信息
		//参数二用户认证对象
		Session session = Session.getInstance(propes, new Authenticator() {
			@Override
			protected PasswordAuthentication getPasswordAuthentication() {
			
				return new PasswordAuthentication(usename, password);
			}
		});
		session.setDebug(true);
		return session;
	}

}

 发送文件:

发送时需要构建一个Mssage 对象,然后调用Transport.send()即可完成发送:

具体代码如下:

public class email1 {
	public static void main(String[] args) {
		
		try {
			Session session = javaSession .creatsession();
			
			MimeMessage msg = new MimeMessage(session);
			msg.setFrom(new InternetAddress("cccxxx12@126.com"));
			//接收用户
            msg.setRecipient(RecipientType.TO, new InternetAddress("843503190@qq.com"));
			
            //文件标题
            msg.setSubject("这是一封离别信","utf-8");
			//邮件正文包含标签(控制文本的格式)
			msg.setText("<b>写下我该</b>离开的原因","utf-8","html");
			
			Transport.send(msg);
		} catch (AddressException e) {
			e.printStackTrace();
		} catch (MessagingException e) {
			e.printStackTrace();
		}
	}
}

 下面我们来查看运行结果:

 发送附件:

要在邮件中发送附件就不能直接调用message.setText()方法,而是要创建一个Multipart对象:

代码实现如下:

public class email2 {
	public static void main(String[] args) throws IOException {
		try {
			Session session = javaSession .creatsession();
			
			MimeMessage msg = new MimeMessage(session);
			//发送方
			msg.setFrom(new InternetAddress("cccxxx12@126.com"));
			//接受方
			msg.setRecipient(RecipientType.TO, new InternetAddress("843503190@qq.com"));
			//邮件标题
			msg.setSubject("网易邮箱中信,","utf-8");
	
			//邮件正文复合内容
			Multipart multipart = new MimeMultipart();
			
			//正文
			BodyPart textpart = new MimeBodyPart();
			//参数一:正文内容
			//参数二:内容类型;字符编码集
			StringBuffer dody = new StringBuffer();
			dody.append("<b>写下我该</b>离开的原因");
			dody.append("<img src=\"cid:gangzi \"/>");
			textpart.setContent(dody.toString(),"text/html;charset=utf-8");			
			
			//附件
			BodyPart imagePart = new MimeBodyPart();
			imagePart.setFileName("bb.jpg");//设置附件显示名称
			
			//数据处理对象(读取附件文件从本地磁盘进行读取)
			imagePart.setDataHandler(
					new DataHandler(
							new ByteArrayDataSource(
									Files.readAllBytes(Paths.get("F:\\陈嘻嘻\\新建文件夹\\555.jpg")), 
									"application/octet-stream")));
			
			imagePart.setHeader("Content-ID", "<gangzi>");
			
			//添加至邮件
			multipart.addBodyPart(textpart);//添加正文
			multipart.addBodyPart(imagePart);//添加附件
			//设置邮件内容
			msg.setContent(multipart);
			
			Transport.send(msg);
			 
		} catch (AddressException e) {
			e.printStackTrace();
		} catch (MessagingException e) {
			e.printStackTrace();
		}
	}
}

结果如下:

 

到此程序结束:

使用javamail发送邮件是一个MUA软件通过SMTP协议发送邮件至MTA服务器

某些邮件服务商需要开启SMTP,并需要独立的登陆密码;

  • 29
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值