首页 >邮件操作 > 内容

Selenium—— 邮件管理(JavaMail)浅析

2023年1月11日 21:21

邮件管理(JavaMail)浅析

电子邮件(Email)

  1. 电子邮件的应用越来越广泛,比如测试报告的发送

  2. 一般发送的邮件主要分解为两大部分:(1)一部分是发信人、接信人、主题等邮件标头;(2)另外一部分是邮件内容,有可能带有附件。

  3. 邮件传输协议:
    在这里插入图片描述

    (1)SMTP:简单邮件传输协议,是一种TCP协议支持的提供可靠且有效电子邮件传输的 应用层协议。SMTP服务器会中转消息给接收方SMTP服务器以便最终让用户经由POP或者IMAP获得邮件内容(发送邮件、邮件的传输, 点对点的传输,可靠的连接)
    (2)POP:邮局协议,目前版本为3,又称为POP3协议。是允许电子邮件客户端下载服务器上的邮件的协议。(电子邮件的接收,使用的是TCP的110端口
    (3)IMAP:因特网消息访问协议,又称IMAP4协议。更高级的用户接收邮件的协议。
    (4)MIME:多用途互联网邮件扩展类型,不是邮件传输协议,对于传输的内容的消息、附件以及其他的内容定义了格式。可以理解成一个定义格式的标准。
    POP中的邮件由客户端进行管理,IMAP中邮件则由服务器进行管理。

JavaMail

  1. JavaMail由sun公司发布,在Java程序中处理Email的API。是开发人员在应用程序中实现邮件发送和接收功能的一套标准开发类库,支持常用的邮件协议,如SMTP、POP3、IMAP。

  2. JavaMail目前没有被加在标准的JDK中,使用JavaMail必须另行下载。下载链接

  3. JavaMail主要组件:
    (1)Session类定义了一个基本邮件会话,是Java Mail API最高层入口类。所有其它类都是经由这个session才得以生效。
    (2)Message:定义邮件信息,比如内容、标题等,Message是抽象类,更常用的是javax.mail.internet.MimeMessage类。
    (3)Address:用于设置邮件的发送人和收件人地址,常用其子类javax.mail.internet.InternetAddress
    (4)Authenticator:授权者类,以用户名、密码的方式访问邮件服务器
    (5)Transport类实现了发送邮件的协议(通常为SMTP)

  4. 测试报告发送邮件三种方式:
    (1)使用监听器进行test-output压缩,javamail发送压缩包
    (2)使用监听器统计失败的方法名称,作为邮件的正文
    (3)在2的基础上用freemarker进行美化测试报告。

发送邮件栗子:

package mail1;import java.io.File;import java.util.Date;import java.util.Properties;import jakarta.activation.DataHandler;import jakarta.activation.DataSource;import jakarta.activation.FileDataSource;import jakarta.mail.Authenticator;import jakarta.mail.Message.RecipientType;import jakarta.mail.MessagingException;import jakarta.mail.PasswordAuthentication;import jakarta.mail.Session;import jakarta.mail.Transport;import jakarta.mail.internet.AddressException;import jakarta.mail.internet.InternetAddress;import jakarta.mail.internet.MimeBodyPart;import jakarta.mail.internet.MimeMessage;import jakarta.mail.internet.MimeMultipart;public class SendMail {public static void sendMail(String to, String content) throws AddressException, MessagingException {String from = "";String auth_code = "";//授权码String server = "smtp.126.com";Properties pro = new Properties();pro.put("mail.transport.protocol", "smtp");pro.put("mail.smtp.host", server);pro.put("mail.smtp.auth", true);//1.创建sessionSession session = Session.getInstance(pro, new Authenticator() {@Overrideprotected PasswordAuthentication getPasswordAuthentication() {return new  PasswordAuthentication(from, auth_code);}});//2.创建邮件MimeMessage message = new MimeMessage(session);message.setFrom(new InternetAddress(from)); //发送人邮件地址message.addRecipient(RecipientType.TO, new InternetAddress(to));//收件人地址;add可以添加多个收件人//message.setRecipient();//ֻ只有最后一个set管用//邮件主题,正文内容message.setSubject("test");//message.setText(content);//发送HTML格式正文MimeBodyPart part1 = new MimeBodyPart();part1.setContent("<h1>测试</h1>", "text/html;charset=utf-8");//上传附件MimeBodyPart part2 = new MimeBodyPart();DataSource source = new FileDataSource(new File("D:\\QQ截图\\2.png"));part2.setDataHandler(new DataHandler(source));part2.setFileName("测试结果");MimeMultipart mp = new MimeMultipart();mp.addBodyPart(part1);mp.addBodyPart(part2);message.setContent(mp);//定时发送message.setSentDate(new Date());//3.发送邮件Transport.send(message);System.out.println("发送成功");}public static void main(String[] args) {try {sendMail("发送人@qq.com", "first");} catch (MessagingException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}

收件人:

package mail1;import java.util.Properties;import jakarta.mail.Address;import jakarta.mail.Authenticator;import jakarta.mail.Folder;import jakarta.mail.Message;import jakarta.mail.MessagingException;import jakarta.mail.NoSuchProviderException;import jakarta.mail.PasswordAuthentication;import jakarta.mail.Session;import jakarta.mail.Store;public class ReceiveMail {public static void main(String[] args) throws MessagingException {String popServer="pop.126.com"; //邮箱String user="";//发送人String auth_code=""; //授权码Properties props = new Properties();props.put("mail.store.protocol", "pop3");props.put("mail.pop3.host", popServer);props.put("mail.pop3.auth", true);//1创建session对象Session session=Session.getInstance(props, new Authenticator() {// 创建一个密码验证器@Overrideprotected PasswordAuthentication getPasswordAuthentication() {return new  PasswordAuthentication(user, auth_code);}});session.setDebug(false);Store store=session.getStore("pop3");store.connect(popServer, user, auth_code);Folder folder= store.getFolder("INBOX");folder.open(Folder.READ_WRITE);Message[] messages=folder.getMessages();for(Message message:messages) {System.out.println(message.getSubject());Address address=message.getFrom()[0];System.out.println(address);}folder.close();store.close();}}


参考文章:https://blog.csdn.net/m0_51508220/article/details/124702053

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时候联系我们修改或删除,在此表示感谢。

特别提醒:

1、请用户自行保存原始数据,为确保安全网站使用完即被永久销毁,如何人将无法再次获取。

2、如果上次文件较大或者涉及到复杂运算的数据,可能需要一定的时间,请耐心等待一会。

3、请按照用户协议文明上网,如果发现用户存在恶意行为,包括但不限于发布不合适言论妄图

     获取用户隐私信息等行为,网站将根据掌握的情况对用户进行限制部分行为、永久封号等处罚。

4、如果文件下载失败可能是弹出窗口被浏览器拦截,点击允许弹出即可,一般在网址栏位置设置

5、欢迎将网站推荐给其他人,网站持续更新更多功能敬请期待,收藏网站高效办公不迷路。

      



登录后回复

共有0条评论