zoukankan      html  css  js  c++  java
  • Java-JavaMail邮件开发(1)Java Mail

    1、仅使用Java Mail

      使用163邮箱作为代理服务器:

      引入依赖:

    <dependency>
         <groupId>com.sun.mail</groupId>
         <artifactId>javax.mail</artifactId>
         <version>1.6.2</version>
    </dependency>

       config.properties

    host=smtp.163.com
    from=xxxxxxxxxx@163.com
    to=xxxxxxxxxxx@qq.com
    affix=src/main/java/a.png
    affixName=a.png
    user=xxxxxxxxxx
    pwd=xxxxxxxxxxx      #授权码
    subject=u6D4Bu8BD5u53D1u9001u90AEu4EF6

       SendMailUtil.java

    package com.lfy.cn.JExcelApiTest;
    
    import java.io.IOException;
    import java.util.Properties;
    
    import javax.mail.*;
    import javax.mail.internet.*;
    import javax.activation.*;
    
    public class SendMailUtil {
    
        static String HOST = ""; // smtp服务器
        static String FROM = ""; // 发件人地址
        static String TO = ""; // 收件人地址
        static String AFFIX = ""; // 附件地址
        static String AFFIXNAME = ""; // 附件名称
        static String USER = ""; // 用户名
        static String PWD = ""; // 163的授权码
        static String SUBJECT = ""; // 邮件标题
        static String[] TOS = null;
        
        static {
            try {
                Properties props = new Properties(); 
                props.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("config.properties"));//从自定义配置文件获取相关参数
                HOST=props.getProperty("host");
                FROM=props.getProperty("from");
                TO=props.getProperty("to");
                TOS=TO.split(",");
                AFFIX=props.getProperty("affix");
                AFFIXNAME=props.getProperty("affixName");
                USER=props.getProperty("user");
                PWD=props.getProperty("pwd");
                SUBJECT=props.getProperty("subject");
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        /**
         * 发送邮件
         * @param host
         * @param user
         * @param pwd
         */
        public static void send(String context) {
            Properties props = new Properties();
            props.put("mail.smtp.host", HOST);//设置发送邮件的邮件服务器的属性(这里使用网易的smtp服务器)
            props.put("mail.smtp.auth", "true");  //需要经过授权,也就是有户名和密码的校验,这样才能通过验证(一定要有这一条)
            Session session = Session.getDefaultInstance(props);//用props对象构建一个session
            session.setDebug(true);
            MimeMessage message = new MimeMessage(session);//用session为参数定义消息对象
            try {
                message.setFrom(new InternetAddress(FROM));// 加载发件人地址
                InternetAddress[] sendTo = new InternetAddress[TOS.length]; // 加载收件人地址
                for (int i = 0; i < TOS.length; i++) {  
                    sendTo[i] = new InternetAddress(TOS[i]);  
                }
                message.addRecipients(Message.RecipientType.TO,sendTo);
                message.addRecipients(MimeMessage.RecipientType.CC, InternetAddress.parse(FROM));//设置在发送给收信人之前给自己(发送方)抄送一份,不然会被当成垃圾邮件,报554错
                message.setSubject(SUBJECT);//加载标题
                Multipart multipart = new MimeMultipart();//向multipart对象中添加邮件的各个部分内容,包括文本内容和附件
                BodyPart contentPart = new MimeBodyPart();//设置邮件的文本内容
                contentPart.setText(context);
                multipart.addBodyPart(contentPart);
                if(!AFFIX.isEmpty()){//添加附件
                     BodyPart messageBodyPart = new MimeBodyPart();
                     DataSource source = new FileDataSource(AFFIX);
                     messageBodyPart.setDataHandler(new DataHandler(source));//添加附件的内容
                     sun.misc.BASE64Encoder enc = new sun.misc.BASE64Encoder();//添加附件的标题
                     messageBodyPart.setFileName("=?GBK?B?"+ enc.encode(AFFIXNAME.getBytes()) + "?=");
                     multipart.addBodyPart(messageBodyPart);
                }
                message.setContent(multipart);//将multipart对象放到message中
                message.saveChanges(); //保存邮件
                Transport transport = session.getTransport("smtp");//发送邮件
                transport.connect(HOST, USER, PWD);//连接服务器的邮箱
                transport.sendMessage(message, message.getAllRecipients());//把邮件发送出去
                transport.close();//关闭连接
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        
    
        public static void main(String[] args) {
            send("内容");
        }
    }

       运行效果:

       

    2、总结

      邮件发送分为四步:创建邮件发送器编写邮件内容书写邮件往来地址、发送邮件

      spring提供了JavaMailSenderImpl对Java Mail的支持,JavaMailSenderImpl继承自javaMailSender。

      JavaMailSenderImpl支持MimeMessages和SimpleMailMessages:

       MimeMessages为复杂邮件模板,支持文本、附件、html、图片等。

         SimpleMailMessages实现了MimeMessageHelper,为普通邮件模板,支持文本。

  • 相关阅读:
    linux vsftp配置
    oracle 执行计划查看
    oracle更新语句merge和update
    windows server2008 kettle部署
    oracle-trasnlate函数
    oracle 报警日志详解
    修改oracle实例名orcl为demo
    2017.11.05
    2017.10.22
    2017.09.22
  • 原文地址:https://www.cnblogs.com/ZeroMZ/p/11408589.html
Copyright © 2011-2022 走看看