博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
javaMail
阅读量:5890 次
发布时间:2019-06-19

本文共 6065 字,大约阅读时间需要 20 分钟。

一、javaMail概念

  JavaMail是由Sun定义的一套收发电子邮件的API,不同的厂商可以提供自己的实现类。但它并没有包含在JDK中,而是作为JavaEE的一部分。

  javaMail常见的邮件协议包括:

    SMTP:简单的邮件传输协议,用于发送电子邮件协议;

    POP3:用于接收电子邮件的标准邮件协议;

    IMAP:互联网消息协议,是POP3的代替协议

  这三种协议都有对应SSL加密传输的协议,分别是SMTPS,POP3S和IMAPS。

 

二、搭建James邮件服务器

   James是Apache的一个开源项目,纯Java实现

   搭建James服务器

     ① 下载apache-james-2.3.2.zip解压

     ② 运行bin目录下的run.bat即可启动服务器[Telnet  localhost 4555]

     ③ 通过apps\james\SAR-INF\config.xml配置服务器

   注:先到bin下run一道。 放如非中文目录, 得再控制面板开启Telnet客户端

 

 三、安装OutLook[邮件客户端]

  产品秘钥:PQDV9-GPDV4-CRM4D-PHDTH-4M2MT

  创建用户账号

    一、使用telnet连接James的Remote Administration Tool

    二、以管理员身份登录

    三、使用adduser命令添加用户

 

四、配置outlook邮件客户端

  为了方便查看,可以配置Microsoft Outlook邮件客户端,保证James邮件服务器是启动状态,启动Microsoft Outlook.

  选择“工具”->“选项”,打开“选项”面板。选择“邮件设置”并点击“电子邮件账户”,打开“账号设置”面板。在“电子邮件”选项卡下新建邮件账户

 

五、案例[搭建James邮件服务器]

  需求说明:

  在本机搭建James邮件服务器,自定义服务器的名称。

  创建两个测试用户。

  在Microsoft Outlook中配置其中一个测试用户为Outlook邮件账户

六、使用JavaMail发送电子邮件(案例)

  首先定义一个EmailAuthenticator类 extend Authenticator

1 public class EmailAuthenticator extends Authenticator { 2     private String username;   3         4     private String userpass; 5   6     public void setUsername(String username) { 7         this.username = username; 8     } 9  10     public void setUserpass(String userpass) {11         this.userpass = userpass;12     }13  14     public EmailAuthenticator() {15     }16  17     public EmailAuthenticator(String username, String userpass) {18         this.username = username;19         this.userpass = userpass;20     }21     public PasswordAuthentication getPasswordAuthentication(){22         return new PasswordAuthentication(username,userpass);23     }

  创建Mail类设置邮件信息:

1 public class Mail { 2   private String mailServer,from,to,mailSubject,mailContent; 3   private String username,password; 4   public Mail(){ 5       //设置邮件信息 6       //进行认证登录的用户名 7       username="hq@mail.com"; 8       //认证密码 9       password="hq";10       //认证的邮箱对应的邮件服务器11       mailServer="192.168.17.176";12       //发件人信息13       from="wj";14       //收件人信息15       to="wj@mail.com";16       //邮件标题17       mailSubject="我们都是好孩子333";18       //邮件内容19       mailContent="这是一封测试邮件!如有雷同,纯属不可能";20   }21   //设置邮件服务器22   @SuppressWarnings("static-access")23 public  void send(){24       Properties prop=System.getProperties();25       //指定邮件server26       prop.put("mail.smtp.host", mailServer);27        28       //是否开启认证29       prop.put("mail.smtp.auth", "true");30        31       //smtp协议的32       prop.put("mail.smtp.port", "25");33       //产生Session服务34       EmailAuthenticator mailauth=new EmailAuthenticator(username, password);35       Session mailSession=Session.getInstance(prop,(Authenticator)mailauth);36        try {37            //封装Message对象38            Message message=new MimeMessage(mailSession);39             40            message.setFrom(new InternetAddress(from)); //发件人41            message.setRecipient(Message.RecipientType.TO, new InternetAddress(to));//收件人42            message.setSubject(mailSubject);43            //设置内容(设置字符集处理乱码问题)44            message.setContent(mailContent,"text/html;charset=gbk");45            message.setSentDate(new Date());46            //创建Transport实例,发送邮件47            Transport tran=mailSession.getTransport("smtp");48            tran.send(message,message.getAllRecipients());49            tran.close();50             51         } catch (Exception e) {52             e.printStackTrace();53         }54   }

  测试类:  

1 public class MyTest {2     public static void main(String[] args) {3         Mail mail=new Mail();4         mail.send();5         System.out.println("success!");6     }7  8 }

 

  

 

七、发送带附件的Mail

1 public class MailWithAttachment { 2     private JavaMailSender mailSender; //必须使用 JavaMailSender 3     public void setMailSender(JavaMailSender mailSender) { 4         this.mailSender = mailSender; 5     } 6       7     public void send() throws MessagingException,IOException{ 8         MimeMessage mimeMessage = mailSender.createMimeMessage(); 9         MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true, "UTF-8");10         helper.setFrom("hq@mail.com");11         helper.setTo("wj@mail.com");12          13         helper.setSubject("哈哈哈");14         helper.setText("每日一笑,开开心心!!!");15         //添加附件116         ClassPathResource file1 = new ClassPathResource(17                                         "/cn/bdqn/attachfiles/test.doc");18         helper.addAttachment(file1.getFilename(), file1.getFile());19         //添加附件2:附件的文件名为中文时,需要对文件名进行编码转换,解决乱码问题20         ClassPathResource file2 = new ClassPathResource(21                                         "/cn/bdqn/attachfiles/附件测试文件.doc");22         helper.addAttachment(MimeUtility.encodeWord(file2.getFilename()),file2.getFile());23         mailSender.send(mimeMessage);24     }25 }

测试类:  

1 public class MailTest { 2     public static void main(String[] args){ 3         ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); 4           5         /*测试带附件的邮件*/ 6         try{ 7             MailWithAttachment mailWithAttach = (MailWithAttachment)context.getBean("mailWithAttachment"); 8             mailWithAttach.send(); 9         }catch(Exception e){10             System.out.print(e.toString());11         }12     }13 }

applicationContext.xml:配置  

 

 

 

 

 

八、 Transport和Store:传输和存储

  邮件操作只有发送或接收两种处理方法,javaMail将两个不同的操作描述传输(javax.mail.Transport)和存储(javax.mail.Store),传输对应邮件的发送,而存储对应邮件的接收。

  Session提供了几个用于创建Transport和Store实例的方法,在具体讲解这些方法之前,我们事先了解一下Session创建Transport和Store的内部机制。我们知道提供者在javamail.providers配置文件中为每一种支持的邮件协议定义了实现类,Session根据协议类型(stmp、pop3等)和邮件操作方式(传输和存储)这两个信息就可以定位到一个实例类上。比如,指定stmp协议和transport类型后,Session就会使用com.sun.mail.smtp.SMTPTransport实现类创建一个Transport实例,而指定pop3协议和store类型时,则会使用com.sun.mail.pop3.POP3Store实例类创建一个Store实例。Session提供了多个重载的getTransport()和getStore()方法,这些方法将根据Session中Properties属性设置情况进行工作,影响这两套方法工作的属性包括:

属性名

说明

mail.transport.protocol

默认的邮件传输协议,例如,smtp

mail.store.protocol

默认的存储邮件协议,例如:pop3

mail.host

默认的邮件服务地址,例如:192.168.67.1

mail.user

默认的登陆用户名,例如:zapldy

 

转载于:https://www.cnblogs.com/Zhangmin123/p/6189450.html

你可能感兴趣的文章
结构体:HASH表模板
查看>>
[转]理解Linux文件系统之inode
查看>>
在i3 Cpu上允许64位系统
查看>>
视频编解码学习之五:差错控制及传输
查看>>
Postman教程
查看>>
python模块--os模块
查看>>
HSSFRow获取单元格方法与区别
查看>>
洛谷 1365 WJMZBMR打osu! / Easy
查看>>
删除UINavigationItem上的BarButtonItem
查看>>
数据分析相关模块
查看>>
Python数据结构1-----基本数据结构和collections系列
查看>>
SQL Denali-FileTable
查看>>
C# 图像处理:复制屏幕到内存中,拷屏操作
查看>>
PHP微信支付流程
查看>>
linux下单节点oracle数据库间ogg搭建
查看>>
PLSQL Developer软件使用大全
查看>>
swift三方库
查看>>
杭州之行
查看>>
oracle ORA-00917: missing comma 是因为少逗号
查看>>
策略模式简介
查看>>