English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

تعليميات Java الأساسية

تحكم العملية في Java

مجموعات Java

Java متجهات الأهداف (I)

Java موجه الأ�체 (II)

Java موجه الأ�체 (III)

معالجة الاستثناءات Java

قائمة Java List

Java Queue (الطابور)

مجموعات Java Map

مجموعات Java Set

إدخال/إخراج Java (I/O)

قراء/كتابة Java

مواضيع أخرى في Java

Java إرسال البريد الإلكتروني

إرسال البريد الإلكتروني باستخدام تطبيق Java بسيط جدًا، ولكن يجب أن تثبت JavaMail API وJava Activation Framework (JAF) أولاً على جهازك.

  • يمكنك تنزيل أحدث إصدار من Java من موقع JavaMail، افتح اليمين من الصفحة هناك تحميل الرابط، انقر عليه للتنزيل.

  • يمكنك تنزيل أحدث إصدار من Java من موقع JAF (الإصدار 1.1.1).

يمكنك أيضًا استخدام الروابط التالية التي يقدمها الموقع:

قم بتحميل وتفريغ هذه الملفات، حيث ستجد في الدليل المكتشف حديثًا بعض ملفات jar للبرنامجين. تحتاج إلى إضافة mail.jar و activation.jar أضف الملف إلى CLASSPATH الخاص بك.

إذا كنت تستخدم خادم بريد إلكتروني ثالث مثل خادم SMTP لـ QQ، يمكنك الرجوع إلى مثال كامل للتحقق من صحة الاعتماد في نهاية المقال.

إرسال بريد إلكتروني بسيط

إليك مثال على إرسال بريد إلكتروني بسيط. افترض أن وحدة معالجة الشبكة المحلية مرتبطة بالشبكة.

// اسم الملف 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 = "[email protected]";
 
      // بريد البريدي للمرسل
      String from = "[email protected]";
 
      // 指定发送邮件的主机为 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);
 
         // منشأ مجموعة: مجال الرأس
         message.setFrom(new InternetAddress(from));
 
         // تعيين إلى: حقل رأس
         message.addRecipient(Message.RecipientType.TO,
                                  new InternetAddress(to));
 
         // تعيين عنوان: حقل رأس
         message.setSubject("This is the Subject Line!");
 
         // تعيين جسم الرسالة
         message.setText("This is actual message");
 
         // إرسال رسالة
         Transport.send(message);
         System.out.println("Sent message successfully....");
      }سالب(MessagingException mex) {
         mex.printStackTrace();
      }
   }
}

قم بتشغيل البرنامج لتشغيل البريد الإلكتروني بسيطًا:

$ java SendEmail
Sent message successfully....

إذا كنت ترغب في إرسال بريد إلكتروني إلى عدة مستلمين، فاستخدم الطريقة التالية لتعيين IDs للمستلمين المتعددين:

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

إليك وصفًا للمعلمات:

  • type:سيتم تعيينها كـ TO، CC أو BCC، حيث يعني CC إرسال نسخة من الرسالة إلى، و BCC يعني إرسال نسخة سرية من الرسالة إلى. مثال:Message.RecipientType.TO

  • addresses: هذا هو مصفوفة ID البريد الإلكتروني. عند تحديد ID البريد الإلكتروني المحدد، ستحتاج إلى استخدام طريقة InternetAddress().

发送一封 HTML E-mail

下面是一个发送 HTML E-mail 的实例。假设你的本地主机已经连接到网络。

和上一个实例很相似,除了我们要使用 setContent() 方法来通过第二个参数为 "text/html",来设置内容来指定要发送HTML 内容。

// 文件名 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 = "[email protected]";
 
      // بريد البريدي للمرسل
      String from = "[email protected]";
 
      // 指定发送邮件的主机为 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);
 
         // منشأ مجموعة: مجال الرأس
         message.setFrom(new InternetAddress(from));
 
         // تعيين إلى: حقل رأس
         message.addRecipient(Message.RecipientType.TO,
                                  new InternetAddress(to));
 
         // Set Subject: 头字段
         message.setSubject("This is the Subject Line!");
 
         // 发送 HTML 消息, 可以插入html标签
         message.setContent("

This is actual message

",                             "text/html" );            // إرسال رسالة          Transport.send(message);          System.out.println("Sent message successfully....");       }سالب(MessagingException mex) {          mex.printStackTrace();       }    } }

编译并运行此程序来发送HTML e-mail:

$ java SendHTMLEmail
Sent message successfully....

发送带有附件的 E-mail

下面是一个发送带有附件的 E-mail的实例。假设你的本地主机已经连接到网络。

// 文件名 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 = "[email protected]";
 
      // بريد البريدي للمرسل
      String from = "[email protected]";
 
      // 指定发送邮件的主机为 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);
 
         // منشأ مجموعة: مجال الرأس
         message.setFrom(new InternetAddress(from));
 
         // تعيين إلى: حقل رأس
         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....");
      }سالب(MessagingException mex) {
         mex.printStackTrace();
      }
   }
}

编译并运行你的程序来发送一封带有附件的邮件。

$ java SendFileEmail
Sent message successfully....

用户认证部分

如果需要提供用户名和密码给e-mail服务器来达到用户认证的目的,你可以通过如下设置来完成:

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

e-mail其他的发送机制和上述保持一致。

需要用户名密码验证邮件发送示例:

本示例以 QQ 邮件服务器为例,你需要在登录QQ邮箱后台在"设置"=》账号中开启POP3/SMTP服务 ,如下图所示:

QQ 邮箱通过生成授权码来设置密码:

Java 代码如下:

// 需要用户名密码邮件发送示例
//文件名 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 = "[email protected]";
 
      // بريد البريدي للمرسل
      String from = "[email protected]";
 
      // تحديد خادم إرسال البريد على smtp.qq.com
      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("[email protected]", "رمز الاعتماد بريد QQ"); // اسم المستخدم البريدي للمرسل ورمز الاعتماد
        }
       });
 
      try{
         // إنشاء كائن MimeMessage افتراضي
         MimeMessage message = new MimeMessage(session);
 
         // منشأ مجموعة: مجال الرأس
         message.setFrom(new InternetAddress(from));
 
         // تعيين إلى: حقل رأس
         message.addRecipient(Message.RecipientType.TO,
                                  new InternetAddress(to));
 
         // تعيين عنوان: حقل رأس
         message.setSubject("This is the Subject Line!");
 
         // تعيين جسم الرسالة
         message.setText("This is actual message");
 
         // إرسال رسالة
         Transport.send(message);
         System.out.println("Sent message successfully....from oldtoolbag.com");
      }سالب(MessagingException mex) {
         mex.printStackTrace();
      }
   }
}