• Javamail


    一、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]

         ③ 通过appsjamesSAR-INFconfig.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       //指定邮件server
    26       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         //添加附件1
    16         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

  • 相关阅读:
    LeetCode 【1】 Two Sum --001
    计算机网络-自定向下方法之应用层
    Android TextView自动换行、排列错乱问题及解决
    Android ScrollView内部组件设置android:layout_height="fill_parent"无效的解决办法
    Gson解析空字符串异常的处理
    AndroBench手机性能测试
    使用adb命令通过IP地址连接手机
    Android string.xml 添加特殊字符
    Android string资源 包含 数学符号等特殊字符 及 参数占位符
    Android Studio多渠道打包(二)
  • 原文地址:https://www.cnblogs.com/szj-ang/p/6192746.html
Copyright © 2020-2023  润新知