Java 發(fā)送郵件

java 發(fā)送郵件

使用 java 應(yīng)用程序發(fā)送 e-mail 十分簡(jiǎn)單,但是首先你應(yīng)該在你的機(jī)器上安裝 javamail api 和 java activation framework (jaf) 。

  • 您可以從 java 網(wǎng)站下載最新版本的 javamail。
  • 您可以從 java 網(wǎng)站下載最新版本的 jaf。

下載并解壓縮這些文件,在新創(chuàng)建的頂層目錄中,您會(huì)發(fā)現(xiàn)這兩個(gè)應(yīng)用程序的一些 jar 文件。您需要把 mail.jaractivation.jar 文件添加到您的 classpath 中。

如果你使用第三方郵件服務(wù)器如 qq 的smtp服務(wù)器,可查看文章底部用戶認(rèn)證完整的范例。

 

1. 發(fā)送一封簡(jiǎn)單的 e-mail

下面是一個(gè)發(fā)送簡(jiǎn)單e-mail的例子。假設(shè)你的本地主機(jī)已經(jīng)連接到網(wǎng)絡(luò)。

// 文件名 sendemail.java

import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
    
public class sendemail
{
    public static void main(string [] args)
    {   
        // 收件人電子郵箱
        string to = "abcd@gmail.com";
    
        // 發(fā)件人電子郵箱
        string from = "web@gmail.com";
    
        // 指定發(fā)送郵件的主機(jī)為 localhost
        string host = "localhost";
    
        // 獲取系統(tǒng)屬性
        properties properties = system.getproperties();
    
        // 設(shè)置郵件服務(wù)器
        properties.setproperty("mail.smtp.host", host);
    
        // 獲取默認(rèn)session對(duì)象
        session session = session.getdefaultinstance(properties);
    
        try{
            // 創(chuàng)建默認(rèn)的 mimemessage 對(duì)象
            mimemessage message = new mimemessage(session);
    
            // set from: 頭部頭字段
            message.setfrom(new internetaddress(from));
    
            // set to: 頭部頭字段
            message.addrecipient(message.recipienttype.to,
                                    new internetaddress(to));
    
            // set subject: 頭部頭字段
            message.setsubject("this is the subject line!");
    
            // 設(shè)置消息體
            message.settext("this is actual message");
    
            // 發(fā)送消息
            transport.send(message);
            system.out.println("sent message successfully....");
        }catch (messagingexception mex) {
            mex.printstacktrace();
        }
    }
}

編譯并運(yùn)行這個(gè)程序來(lái)發(fā)送一封簡(jiǎn)單的e-mail:

$ java sendemail
sent message successfully....

如果你想發(fā)送一封e-mail給多個(gè)收件人,那么使用下面的方法來(lái)指定多個(gè)收件人id:

void addrecipients(message.recipienttype type, address[] addresses) throws messagingexception

下面是對(duì)于參數(shù)的描述:

  • type:要被設(shè)置為 to, cc 或者 bcc,這里 cc 代表抄送、bcc 代表秘密抄送。舉例:message.recipienttype.to
  • addresses: 這是 email id 的數(shù)組。在指定電子郵件 id 時(shí),你將需要使用 internetaddress() 方法。

 

2. 發(fā)送一封 html e-mail

下面是一個(gè)發(fā)送 html e-mail 的例子。假設(shè)你的本地主機(jī)已經(jīng)連接到網(wǎng)絡(luò)。

和上一個(gè)例子很相似,除了我們要使用 setcontent() 方法來(lái)通過(guò)第二個(gè)參數(shù)為 "text/html",來(lái)設(shè)置內(nèi)容來(lái)指定要發(fā)送html 內(nèi)容。

import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
    
public class sendhtmlemail
{
    public static void main(string [] args)
    {
        
        // 收件人電子郵箱
        string to = "abcd@gmail.com";
    
        // 發(fā)件人電子郵箱
        string from = "web@gmail.com";
    
        // 指定發(fā)送郵件的主機(jī)為 localhost
        string host = "localhost";
    
        // 獲取系統(tǒng)屬性
        properties properties = system.getproperties();
    
        // 設(shè)置郵件服務(wù)器
        properties.setproperty("mail.smtp.host", host);
    
        // 獲取默認(rèn)的 session 對(duì)象。
        session session = session.getdefaultinstance(properties);
    
        try{
            // 創(chuàng)建默認(rèn)的 mimemessage 對(duì)象。
            mimemessage message = new mimemessage(session);
    
            // set from: 頭部頭字段
            message.setfrom(new internetaddress(from));
    
            // set to: 頭部頭字段
            message.addrecipient(message.recipienttype.to,
                                    new internetaddress(to));
    
            // set subject: 頭字段
            message.setsubject("this is the subject line!");
    
            // 發(fā)送 html 消息, 可以插入html標(biāo)簽
            message.setcontent("<h1>this is actual message</h1>",
                            "text/html" );
    
            // 發(fā)送消息
            transport.send(message);
            system.out.println("sent message successfully....");
        }catch (messagingexception mex) {
            mex.printstacktrace();
        }
    }
}

編譯并運(yùn)行此程序來(lái)發(fā)送html e-mail:

$ java sendhtmlemail
sent message successfully....

 

3. 發(fā)送帶有附件的 e-mail

下面是一個(gè)發(fā)送帶有附件的 e-mail的例子。假設(shè)你的本地主機(jī)已經(jīng)連接到網(wǎng)絡(luò)。

import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
    
public class sendfileemail
{
    public static void main(string [] args)
    {
        
        // 收件人電子郵箱
        string to = "abcd@gmail.com";
    
        // 發(fā)件人電子郵箱
        string from = "web@gmail.com";
    
        // 指定發(fā)送郵件的主機(jī)為 localhost
        string host = "localhost";
    
        // 獲取系統(tǒng)屬性
        properties properties = system.getproperties();
    
        // 設(shè)置郵件服務(wù)器
        properties.setproperty("mail.smtp.host", host);
    
        // 獲取默認(rèn)的 session 對(duì)象。
        session session = session.getdefaultinstance(properties);
    
        try{
            // 創(chuàng)建默認(rèn)的 mimemessage 對(duì)象。
            mimemessage message = new mimemessage(session);
    
            // set from: 頭部頭字段
            message.setfrom(new internetaddress(from));
    
            // set to: 頭部頭字段
            message.addrecipient(message.recipienttype.to,
                                    new internetaddress(to));
    
            // set subject: 頭字段
            message.setsubject("this is the subject line!");
    
            // 創(chuàng)建消息部分
            bodypart messagebodypart = new mimebodypart();
    
            // 消息
            messagebodypart.settext("this is message body");
        
            // 創(chuàng)建多重消息
            multipart multipart = new mimemultipart();
    
            // 設(shè)置文本消息部分
            multipart.addbodypart(messagebodypart);
    
            // 附件部分
            messagebodypart = new mimebodypart();
            string filename = "file.txt";
            datasource source = new filedatasource(filename);
            messagebodypart.setdatahandler(new datahandler(source));
            messagebodypart.setfilename(filename);
            multipart.addbodypart(messagebodypart);
    
            // 發(fā)送完整消息
            message.setcontent(multipart );
    
            //   發(fā)送消息
            transport.send(message);
            system.out.println("sent message successfully....");
        }catch (messagingexception mex) {
            mex.printstacktrace();
        }
    }
}

編譯并運(yùn)行你的程序來(lái)發(fā)送一封帶有附件的郵件。

$ java sendfileemail
sent message successfully....

 

4. 用戶認(rèn)證

如果需要提供用戶名和密碼給e-mail服務(wù)器來(lái)達(dá)到用戶認(rèn)證的目的,你可以通過(guò)如下設(shè)置來(lái)完成:

props.put("mail.smtp.auth", "true");
props.setproperty("mail.user", "myuser");
props.setproperty("mail.password", "mypwd");

e-mail其他的發(fā)送機(jī)制和上述保持一致。

需要用戶名密碼驗(yàn)證郵件發(fā)送范例:

本范例以 qq 郵件服務(wù)器為例,你需要在登錄qq郵箱后臺(tái)在"設(shè)置"=》賬號(hào)中開啟pop3/smtp服務(wù) ,如下圖所示:

qq 郵箱通過(guò)生成授權(quán)碼來(lái)設(shè)置密碼:

java 代碼如下:

// 需要用戶名密碼郵件發(fā)送實(shí)例
//本實(shí)例以qq郵箱為例,你需要在qq后臺(tái)設(shè)置
    
import java.util.properties;
    
import javax.mail.authenticator;
import javax.mail.message;
import javax.mail.messagingexception;
import javax.mail.passwordauthentication;
import javax.mail.session;
import javax.mail.transport;
import javax.mail.internet.internetaddress;
import javax.mail.internet.mimemessage;
    
public class sendemail2
{
    public static void main(string [] args)
    {
        // 收件人電子郵箱
        string to = "xxx@qq.com";
    
        // 發(fā)件人電子郵箱
        string from = "xxx@qq.com";
    
        // 指定發(fā)送郵件的主機(jī)為 smtp.qq.com
        string host = "smtp.qq.com";  //qq 郵件服務(wù)器
    
        // 獲取系統(tǒng)屬性
        properties properties = system.getproperties();
    
        // 設(shè)置郵件服務(wù)器
        properties.setproperty("mail.smtp.host", host);
    
        properties.put("mail.smtp.auth", "true");
        // 獲取默認(rèn)session對(duì)象
        session session = session.getdefaultinstance(properties,new authenticator(){
        public passwordauthentication getpasswordauthentication()
        {
            return new passwordauthentication("xxx@qq.com", "qq郵箱授權(quán)碼"); //發(fā)件人郵件用戶名、授權(quán)碼
        }
        });
    
        try{
            // 創(chuàng)建默認(rèn)的 mimemessage 對(duì)象
            mimemessage message = new mimemessage(session);
    
            // set from: 頭部頭字段
            message.setfrom(new internetaddress(from));
    
            // set to: 頭部頭字段
            message.addrecipient(message.recipienttype.to,
                                    new internetaddress(to));
    
            // set subject: 頭部頭字段
            message.setsubject("this is the subject line!");
    
            // 設(shè)置消息體
            message.settext("this is actual message");
    
            // 發(fā)送消息
            transport.send(message);
            system.out.println("sent message successfully....from yapf.com");
        }catch (messagingexception mex) {
            mex.printstacktrace();
        }
    }
}

下一節(jié):java applet 基礎(chǔ)

java語(yǔ)言 教程

相關(guān)文章
亚洲国产精品第一区二区,久久免费视频77,99V久久综合狠狠综合久久,国产免费久久九九免费视频