使用 Java 發送郵件


在我們的應用程序中有時需要給用戶發送郵件,例如激活郵件、通知郵件等等。那么如何使用 Java 來給用戶發送郵件呢?

  • 使用 java 代碼發送郵件

  • 使用工具類發送郵件

  • 使用Spring進行整合發送郵件

  • 發送帶附件的郵件


 

一.使用 Java 代碼發送郵件

第一步:導入依賴坐標

<!-- Javamail -->
<dependency>
    <groupId>javax.mail</groupId>
    <artifactId>mail</artifactId>
    <version>1.4.4</version>
</dependency>

第二步:編寫 Java 代碼發送郵件

/**
 * java程序發送郵件
 * @author Mr.song
 * @date 2019/05/24 16:17
 */
public class JavaMail {
    public static void main(String[] args) throws Exception {
        //1.配置發送郵件的屬性
        Properties properties = new Properties();
        properties.setProperty("mail.smtp.host", "localhost"); //設置協議主機
        properties.setProperty("mail.smtp.auth", "true"); //設置smtp是否需要認證
        //2.根據屬性獲得一個會話
        Session session = Session.getInstance(properties);
        //3.設置會話是debug模式(會打印更多相關信息)
        session.setDebug(true);
        //4.創建郵件主題信息對象
        MimeMessage message = new MimeMessage(session);
        //5.設置發件人
        message.setFrom(new InternetAddress("dintalk@sh.com"));
        //6.設置郵件主題
        message.setSubject("我的第一份java郵件");
        //7.設置郵件正文
        message.setText("第一份郵件發送成功了,哈哈");
        //8.設置收件人: TO-發送    CC-抄送   BCC-密送
        message.setRecipient(Message.RecipientType.TO, new InternetAddress("talkdin@sh.com"));
        //9.獲取發送器對象:提供指定的協議
        Transport transport = session.getTransport("smtp");
        //10.設置發件人的信息
        transport.connect("localhost", "dintalk", "123456");
        //11.發送郵件
        transport.sendMessage(message, message.getAllRecipients());
        //12.關閉資源
        transport.close();
    }
}

二.使用工具類發送郵件

第一步:導入依賴坐標(同 上)

第二步:抽取工具類

/**
 * @author Mr.song
 * @date 2019/05/24 16:53
 */
public class MailUtil {
    /**
     * 工具類發送郵件的方法里,發件郵箱的信息是固定的
     * @param map : 收件地址和發送類型 (地址作 key)
     * @param subject : 郵件的主題
     * @param content : 郵件的正文
     * @throws MessagingException
     */
    public static void sendMail(Map<String,String>map,String subject,String content) 
        throws MessagingException {
        //1.配置發送郵件的屬性
        Properties properties = new Properties();
        properties.setProperty("mail.smtp.host","localhost"); //設置協議主機
        properties.setProperty("mail.smtp.auth","true"); //設置smtp是否需要認證
        //2.根據屬性獲得一個會話
        Session session = Session.getInstance(properties);
        //3.設置會話是debug模式(會打印更多相關信息,生產環境可設為false)
        session.setDebug(true);
        //4.創建郵件主題信息對象
        MimeMessage message = new MimeMessage(session);
        //5.設置發件人
        message.setFrom(new InternetAddress("dintalk@sh.com"));
        //6.設置郵件主題
        message.setSubject(subject);
        //7.設置郵件正文
        message.setText(content);
        //8.設置收件人: TO-發送    CC-抄送   BCC-密送
        for (Map.Entry<String, String> me : map.entrySet()) {
            String email = me.getKey(); //郵件地址
            String type = me.getValue(); //郵件類型
            if ("to".equalsIgnoreCase(type)){
                //發送
                message.setRecipient(Message.RecipientType.TO,new InternetAddress(email));
            }else if ("cc".equalsIgnoreCase(type)){
                //抄送
                message.setRecipient(Message.RecipientType.CC,new InternetAddress(email));
            }else if ("bcc".equalsIgnoreCase(type)){
                //密送
                message.setRecipient(Message.RecipientType.BCC,new InternetAddress(email));
            }
        }
        //9.獲取發送器對象:提供指定的協議
        Transport transport = session.getTransport("smtp");
        //10.設置發件人的信息
        transport.connect("localhost","dintalk","123456");
        //11.發送郵件
        transport.sendMessage(message,message.getAllRecipients());
        //12.關閉資源
        transport.close();
    }
}

第三步:發送郵件

/**
 * 使用工具類發送郵件
 * @author Mr.song
 * @date 2019/05/24 16:47
 */
public class UtilMail {
    public static void main(String[] args) throws Exception{
        Map<String,String> map = new HashMap<>();
        map.put("din@sh.com","to");
        map.put("talk@sh.com","cc");
        map.put("talkdin@sh.com","bcc");
        MailUtil.sendMail(map,"我的第二封郵件","使用工具類發送郵件....");
    }
}

三.整合Spring進行郵件發送

第一步:導入依賴坐標

<!-- Javamail -->
<dependency>
    <groupId>javax.mail</groupId>
    <artifactId>mail</artifactId>
    <version>1.4.4</version>
</dependency>
<!--整合spring坐標-->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context-support</artifactId>
    <version>5.0.4.RELEASE</version>
</dependency>

第二步:編寫發件方郵箱配置文件(mail.properties)

#設置發件方郵箱地址
mail.from=dintalk@sh.com
#設置協議主機
mail.host=localhost
#設置發件方用戶名
mail.username=dintalk
#設置發件方密碼
mail.password=123456
#設置郵件編碼格式
mail.encoding=UTF-8
#設置郵件發送協議
mail.protocol=smtp

第三步:編寫mail的Spring配置文件( applicationContext-mail.xml )

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                   http://www.springframework.org/schema/beans/spring-beans.xsd
                   http://www.springframework.org/schema/context
                   http://www.springframework.org/schema/context/spring-context.xsd">
    <!-- 1.指定引入其他資源文件.properties文件 -->
    <context:property-placeholder location="classpath:mail.properties"/>
    <!-- 2.配置簡單郵件消息對象 -->
    <bean id="mailMessage" class="org.springframework.mail.SimpleMailMessage">
        <!-- 此時我們只需要注入發件箱名稱即可。不要注入主題,正文,收件箱等不固定的信息 -->
        <property name="from" value="${mail.from}"></property>
    </bean>

    <!-- 3.配置郵件發送器 -->
    <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
        <property name="host" value="${mail.host}"></property>
        <property name="username" value="${mail.username}"></property>
        <property name="password" value="${mail.password}"></property>
        <property name="defaultEncoding" value="${mail.encoding}"></property>
        <property name="protocol" value="${mail.protocol}"></property>
        <property name="javaMailProperties">
            <props>
                <!-- 是否需要驗證 -->
                <prop key="mail.smtp.auth">true</prop>
                <!-- 是否需要debug的信息 -->
                <prop key="mail.debug">true</prop>
                <!-- 設置發送超時時間,以秒為單位。0為永不超時 -->
                <prop key="mail.smtp.timeout">0</prop>
            </props>
        </property>
    </bean>
</beans>

第四步:發送郵件

/**
 * 整合Spring的郵件發送
 * @author Mr.song
 * @date 2019/05/24 17:07
 */
public class SpringMail {

    public static void main(String[] args) throws MessagingException {
        //1.獲取Spring容器
        ApplicationContext ac = new ClassPathXmlApplicationContext
            ("classpath:applicationContext-mail.xml");
        //2.獲取消息對象
        SimpleMailMessage mailMessage = (SimpleMailMessage) ac.getBean("mailMessage");
        //3.設置郵件的主題
        mailMessage.setSubject("Spring整合javamail");
        //4.設置郵件的內容,和收件人信息
        mailMessage.setText("Spring整合javamail成功");
        mailMessage.setTo("din@sh.com","talk@sh.com");
        mailMessage.setCc("talkdin@sh.com");
        //5.獲取郵件發送對象
        JavaMailSenderImpl mailSender = (JavaMailSenderImpl) ac.getBean("mailSender");
        //6.發送郵件
        mailSender.send(mailMessage);
    }
}

四.發送帶附件的郵件(在整合Spring的基礎上)

編寫帶附件的郵件

/**
 * 發送帶附件的郵件
 * @author Mr.song
 * @date 2019/05/24 17:35
 */
public class AttachmentMail {
    public static void main(String[] args) throws MessagingException {
        //1.獲取spring的容器
        ApplicationContext ac = new ClassPathXmlApplicationContext
                ("classpath:applicationContext-mail.xml");
        //2.獲取發送器對象(spring提供的)
        JavaMailSenderImpl sender = (JavaMailSenderImpl) ac.getBean("mailSender");
        //3.獲取MimeMessage
        MimeMessage mailMessage = sender.createMimeMessage();
        //4.創建spring提供的復雜郵件的幫助對象
        MimeMessageHelper helper = new MimeMessageHelper(mailMessage, true);
        //5.設置發件人郵箱
        helper.setFrom("dintalk@sh.com");
        //6.設置郵件的收件人
        helper.setTo("din@sh.com");
        //7.設置郵件的主題
        helper.setSubject("帶有附件和圖片的郵件");
        //8.設置郵件的正文
        helper.setText("<html><head></head><body><h1>這是一封帶有附件和圖片的郵件</h1><img src=cid:image></body></html>", true);
        //9.設置圖片
        FileSystemResource resource = new FileSystemResource(new File("C:\\Users\\Administrator\\Desktop\\1.png"));
        //10.使用圖片替換cid (cid是規定的,只能用cid)
        helper.addInline("image", resource);
        //11.設置附件
        helper.addAttachment("1.png", resource);
        //12.發送郵件
        sender.send(mailMessage);
    }
}

 

關注微信公眾號,隨時隨地學習

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM