Java Hantar E-mel


Menghantar e-mel menggunakan aplikasi Java adalah sangat mudah, tetapi pertama sekali anda harus memasang API JavaMail dan Rangka Kerja Pengaktifan Java (JAF) pada mesin anda.

Anda boleh memuat turun versi terkini di JavaMail (Versi 1.2).

Anda boleh memuat turun versi terkini daripada JAF (Versi 1.1.1).

Muat turun dan nyahzip fail ini Anda akan menemui banyak fail jar dalam folder atas. Anda perlu menambah mail.jar dan activation.jar pada CLASSPATH anda.

Jika anda menggunakan pelayan mel pihak ketiga seperti pelayan SMTP QQ, anda boleh melihat contoh lengkap pengesahan pengguna di bahagian bawah artikel.


Hantar E-mel ringkas

Berikut ialah contoh menghantar E-mel ringkas. Andaikan localhost anda disambungkan ke rangkaian.

// 文件名 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";
 
      // 发件人电子邮箱
      String from = "web@gmail.com";
 
      // 指定发送邮件的主机为 localhost
      String host = "localhost";
 
      // 获取系统属性
      Properties properties = System.getProperties();
 
      // 设置邮件服务器
      properties.setProperty("mail.smtp.host", host);
 
      // 获取默认session对象
      Session session = Session.getDefaultInstance(properties);
 
      try{
         // 创建默认的 MimeMessage 对象
         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!");
 
         // 设置消息体
         message.setText("This is actual message");
 
         // 发送消息
         Transport.send(message);
         System.out.println("Sent message successfully....");
      }catch (MessagingException mex) {
         mex.printStackTrace();
      }
   }
}

Kompilasi dan jalankan program ini untuk menghantar e-mel ringkas:

$ java SendEmail
Sent message successfully....

Jika anda ingin menghantar e-mel kepada berbilang penerima, kemudian gunakan kaedah berikut Untuk menentukan berbilang ID penerima:

void addRecipients(Message.RecipientType type,
                   Address[] addresses)
throws MessagingException

Berikut ialah perihalan parameter:

  • taip: untuk ditetapkan kepada TO, CC Atau BCC Di sini CC bermaksud CC dan BCC singkatan untuk Secret CC y. Contohnya: Message.RecipientType.TO

  • alamat: ini Adalah susunan ID e-mel. Apabila menentukan ID e-mel, anda perlu menggunakan kaedah InternetAddress().


Hantar E-mel HTML

Berikut ialah contoh menghantar E-mel HTML. Andaikan localhost anda disambungkan ke rangkaian.

Ia sangat serupa dengan contoh sebelumnya, kecuali kami menggunakan kaedah setContent() untuk menetapkan kandungan dengan menghantar parameter kedua kepada "teks/html" untuk menentukan kandungan HTML yang akan dihantar.

// 文件名 SendHTMLEmail.java
 
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";
 
      // 发件人电子邮箱
      String from = "web@gmail.com";
 
      // 指定发送邮件的主机为 localhost
      String host = "localhost";
 
      // 获取系统属性
      Properties properties = System.getProperties();
 
      // 设置邮件服务器
      properties.setProperty("mail.smtp.host", host);
 
      // 获取默认的 Session 对象。
      Session session = Session.getDefaultInstance(properties);
 
      try{
         // 创建默认的 MimeMessage 对象。
         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!");
 
         // 发送 HTML 消息, 可以插入html标签
         message.setContent("<h1>This is actual message</h1>",
                            "text/html" );
 
         // 发送消息
         Transport.send(message);
         System.out.println("Sent message successfully....");
      }catch (MessagingException mex) {
         mex.printStackTrace();
      }
   }
}

Kompil dan jalankan atur cara ini untuk menghantar e-mel HTML:

$ java SendHTMLEmail
Sent message successfully....

Hantar E-mel dengan Lampiran

Berikut ialah program untuk dihantar dengan lampiran E -contoh mel. Andaikan localhost anda disambungkan ke rangkaian.

// 文件名 SendFileEmail.java
 
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";
 
      // 发件人电子邮箱
      String from = "web@gmail.com";
 
      // 指定发送邮件的主机为 localhost
      String host = "localhost";
 
      // 获取系统属性
      Properties properties = System.getProperties();
 
      // 设置邮件服务器
      properties.setProperty("mail.smtp.host", host);
 
      // 获取默认的 Session 对象。
      Session session = Session.getDefaultInstance(properties);
 
      try{
         // 创建默认的 MimeMessage 对象。
         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!");
 
         // 创建消息部分
         BodyPart messageBodyPart = new MimeBodyPart();
 
         // 消息
         messageBodyPart.setText("This is message body");
        
         // 创建多重消息
         Multipart multipart = new MimeMultipart();
 
         // 设置文本消息部分
         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);
 
         // 发送完整消息
         message.setContent(multipart );
 
         //   发送消息
         Transport.send(message);
         System.out.println("Sent message successfully....");
      }catch (MessagingException mex) {
         mex.printStackTrace();
      }
   }
}

Kompil dan jalankan program anda untuk menghantar e-mel dengan lampiran.

$ java SendFileEmail
Sent message successfully....

Bahagian pengesahan pengguna

Jika anda perlu memberikan nama pengguna dan kata laluan kepada pelayan e-mel untuk pengesahan pengguna, anda boleh melengkapkannya melalui tetapan berikut:

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

Mekanisme penghantaran e-mel yang lain tetap sama seperti di atas.

Contoh penghantaran e-mel yang memerlukan pengesahan nama pengguna dan kata laluan:

Contoh ini menggunakan pelayan mel QQ sebagai contoh Anda perlu log masuk ke latar belakang peti mel QQ dan dayakan POP3 Perkhidmatan /SMTP dalam "Tetapan" = "Akaun , seperti yang ditunjukkan dalam rajah di bawah:

qqmail-set2.jpg

Kod Java adalah seperti berikut:

// 需要用户名密码邮件发送实例
//文件名 SendEmail2.java
//本实例以QQ邮箱为例,你需要在qq后台设置

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";

      // 发件人电子邮箱
      String from = "xxx@qq.com";

      // 指定发送邮件的主机为 localhost
      String host = "smtp.qq.com";  //QQ 邮件服务器

      // 获取系统属性
      Properties properties = System.getProperties();

      // 设置邮件服务器
      properties.setProperty("mail.smtp.host", host);

      properties.put("mail.smtp.auth", "true");
      // 获取默认session对象
      Session session = Session.getDefaultInstance(properties,new Authenticator(){
	    public PasswordAuthentication getPasswordAuthentication()
	    {
	     return new PasswordAuthentication("xxx@qq.com", "qq邮箱密码"); //发件人邮件用户名、密码
	    }
	   });

      try{
         // 创建默认的 MimeMessage 对象
         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!");

         // 设置消息体
         message.setText("This is actual message");

         // 发送消息
         Transport.send(message);
         System.out.println("Sent message successfully....from w3cschool.cc");
      }catch (MessagingException mex) {
         mex.printStackTrace();
      }
   }
}