java學習——發送郵件

mail.jar這個包官網:http://www.oracle.com/technetwork/java/javamail/index-138643.html html

很少說,上例子:java

package com.test.main;

import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import java.io.File;
import java.util.Properties;

/**
 * 發送郵件
 */
public class MySendMail implements Runnable {

    private String host = "smtp.163.com"; // 以163郵箱的服務器爲例
    private String user = "xxx@163.com"; // 用戶名
    private String pwd = "xxxxxxxx"; // 密碼
    private String from = "xxx@163.com"; // 發件人地址,這個不必定要是163的
    private String to = ""; // 收件人地址
    private String subject = ""; // 郵件標題
    private String text = ""; // 郵件正文
    private String sourceFile = "";

    public MySendMail(String to, String title, String text) {
        this.to = to;
        this.subject = title;
        this.text = text;
    }

    public MySendMail(String to, String title, String text, String sourceFile) {
        this.to = to;
        this.subject = title;
        this.text = text;
        this.sourceFile = sourceFile;
    }

    @Override
    public void run() {
        send();
    }

    public void send() {
        Properties props = new Properties();
        // 設置發送郵件的郵件服務器的屬性(這裏使用網易的smtp服務器)
        props.put("mail.smtp.host", host);
        // 須要通過受權,也就是有戶名和密碼的校驗,這樣才能經過驗證(必定要有這一條)
        props.put("mail.smtp.auth", "true");
        // 用剛剛設置好的props對象構建一個session
        Session session = Session.getDefaultInstance(props);
        // 有了這句即可以在發送郵件的過程當中在console處顯示過程信息,供調試使
        session.setDebug(true);
        // 用session爲參數定義消息對象
        MimeMessage message = new MimeMessage(session);
        try {
            // 加載發件人地址
            message.setFrom(new InternetAddress(from));
            // 加載收件人地址
            message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
            // 加載標題
            message.setSubject(subject);
            // 向multipart對象中添加郵件的各個部份內容,包括文本內容和附件
            Multipart multipart = new MimeMultipart();

            // 設置郵件的文本內容
            BodyPart contentPart = new MimeBodyPart();
            contentPart.setText(text);
            multipart.addBodyPart(contentPart);
            
            if (sourceFile != "") {
                // 添加附件
                BodyPart messageBodyPart = new MimeBodyPart();
                DataSource source = new FileDataSource(new File(sourceFile));
                // 添加附件的內容
                messageBodyPart.setDataHandler(new DataHandler(source));
                // 添加附件的標題
                // 這裏很重要,經過下面的Base64編碼的轉換能夠保證你的中文附件標題名在發送時不會變成亂碼
                sun.misc.BASE64Encoder enc = new sun.misc.BASE64Encoder();
                //source.getName()爲附件名,可自行修改
                messageBodyPart.setFileName("=?GBK?B?"+ enc.encode(source.getName().getBytes()) + "?=");
                multipart.addBodyPart(messageBodyPart);
            }

            // 將multipart對象放到message中
            message.setContent(multipart);
            // 保存郵件
            message.saveChanges();
            // 發送郵件
            Transport transport = session.getTransport("smtp");
            // 鏈接服務器的郵箱
            transport.connect(host, user, pwd);
            // 把郵件發送出去
            transport.sendMessage(message, message.getAllRecipients());
            transport.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

調用:服務器

new Thread(new MySendMail("12345678@qq.com","test","this is a test mail")).start();

有附件則用第二個構造函數(附件名稱默認爲文件名),不傳附件那個參數,則郵件不帶附件。
session

注意:oracle

  1. 附件地址不對會致使發送郵件失敗ide

  2. 剛註冊的郵箱通常須要幾個小時才能開smtp功能成功,各類郵箱的服務器地址不同,登錄郵箱後在設置裏能找到......耐心點找。
    函數

相關文章
相關標籤/搜索