Java发送邮件

来源:互联网 发布:不规则区域的填充算法 编辑:程序博客网 时间:2024/06/06 08:55

原文地址:Send email using Java Program

如果你在Java,J2EE或者Python平台上写代码,那么发送邮件是一个基本不用考虑的需求。发送邮件可能需要发送错误警告和注册人或者登录人的确认。Java提供这样的一些功能。

Java需要三样东西来发送邮件:

  • JavaMail API
  • Java Activation Framework (JAF)
  • SMTP服务器详情

你可以从Java官网上下载最新版本的JavaMail API和JAF。下载这两个工具后解压。把mail.jar , smtp.jaractivation.jar三个文件添加到classpath中用以发送邮件。

添加这些文件后,根据下面的步骤和Java代码发送邮件:

  • 通过调用getDefaultInstance()建立一个新的会话对象,把属性传递给参数获取所有的重要属性,例如hostname,SMTP服务器等。
  • 在上一步中通过传递会话对象建立一个MimeMessage对象。
  • 最后一步就是用 javax.mail.Transport发送邮件。
// Java program to send emailimport java.util.*;import javax.mail.*;import javax.mail.internet.*;import javax.activation.*;import javax.mail.Session;import javax.mail.Transport;public class SendEmail {    public static void main(String[] args) {        // email ID of Recipient.        String recipient = "recipient@gmail.com";        // email ID of  Sender.        String sender = "sender@gmail.com";        // using host as localhost        String host = "127.0.0.1";        // Getting system properties        Properties properties = System.getProperties();        // Setting up mail server        properties.setProperty("mail.smtp.host", host);        // creating session object to get properties        Session session = Session.getDefaultInstance(properties);        try {            // MimeMessage object.            MimeMessage message = new MimeMessage(session);            // Set From Field: adding senders email to from field.            message.setFrom(new InternetAddress(sender));            // Set To Field: adding recipient's email to from field.            message.addRecipient(Message.RecipientType.TO, new InternetAddress(recipient));            // Set Subject: subject of the email            message.setSubject("This is Suject");            // set body of the email.            message.setText("This is a test mail");            // Send email.            Transport.send(message);            System.out.println("Mail successfully sent");        } catch (MessagingException mex) {            mex.printStackTrace();        }    }}

输出:

Mail successfully sent


给多人发送邮件

给多个人发邮件与给一个人发邮件是一样的。差别就是发一封邮件给多人你得添加多个收件人。要添加多个收件人我们就得调用下面的方法并传递收件人的类型以及邮件地址列表作为参数:

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

你可以用Message.RecipientType.To添加右键到“收件人”一栏,类似地,你可以用Message.RecipientType.CCMessage.RecipientType.BCC添加到“抄送”和“密送”中。

上述方法中的addresses参数是一个数组,它包含了Email-IDs列表。你必须用 InternetAddress()方法指定邮件。

假设你想给4个人发邮件。你要建立一个大小为4的字符串是数组,原来保存接收人的邮件地址。下面的代码就是利用addRecipients 发送一个简单的邮件,不是给一个人发,而是给多个人发。

// create a new String arrayString[] recipients = new String[4];// add email addressesrecipients[0] = first@gmail.comrecipients[1] = second@gmail.comrecipients[2] = third@gmail.comrecipients[3] = fourth@gmail.com// inside of try block instead of using addRecipient() // use addRecipients()// specify the type of field(TO, CC ,BCC)// pass the array of email ids of recipientsmessage.addRecipient(Message.RecipientType.TO, new InternetAddress(recipients));


利用HTML模板发送邮件

有时候要用HTML模板发送邮件,例如,邮件的正文是用HTML写的。这可以让邮件很好格式化并显示得更吸引人。用HTML发送邮件的代码与一般邮件的发送基本是一样的。差别在于,在指定邮件正文上用的是setContent()方法而不是setText()方法,而且在setContent()中我们必须指定第二个参数为“text/html”,第一个参数就是HTML代码。我们一起看一下用HTML模板发送邮件的代码:

// Java program to send email// with HTML templatesimport java.util.*;import javax.mail.*;import javax.mail.internet.*;import javax.activation.*;import javax.mail.Session;import javax.mail.Transport;public class SendEmail {    public static void main(String[] args) {        // email ID of Recipient.        String recipient = "recipient@gmail.com";        // email ID of  Sender.        String sender = "sender@gmail.com";        // using host as localhost        String host = "127.0.0.1";        // Getting system properties        Properties properties = System.getProperties();        // Setting up mail server        properties.setProperty("mail.smtp.host", host);        // creating session object to get properties        Session session = Session.getDefaultInstance(properties);        try {            // MimeMessage object.            MimeMessage message = new MimeMessage(session);            // Set From Field: adding senders email to from field.            message.setFrom(new InternetAddress(sender));            // Set To Field: adding recipient's email to from field.            message.addRecipient(Message.RecipientType.TO, new InternetAddress(recipient));            // Set Subject: subject of the email            message.setSubject("This is Suject");            // set body of the email.            message.setContent("<h1>This is a HTML text</h1>", "text/html");            // Send email.            Transport.send(message);            System.out.println("Mail successfully sent");        } catch (MessagingException mex) {            mex.printStackTrace();        }    }}

输出:

Mail successfully sent


发送附件

JavaMail API允许发送附件。想要发送附件我们就得建立MimeBodyPart对象,一个赋值text,另一个赋值datahandler。发送带附件的邮件大流程大致如下:

  • 建立一个会话对象
  • 建立一个MimeBodyPart对象并赋值text给它。
  • 建立一个MimeBodyPart对象并赋值datahandler给它。
  • 建立一个MultiPart对象,并用两个MimeBodyPart给这个MultiPart赋值。
  • 设MultiPart对象给message.SetContent()方法。
  • Transport()发送邮件。

下面看一下代码:

// Java program to send email// with attachmentsimport java.util.*;import javax.mail.*;import javax.mail.internet.*;import javax.activation.*;import javax.mail.Session;import javax.mail.Transport;public class SendEmail {    public static void main(String [] args)     {         // email ID of Recipient.        String recipient = "recipient@gmail.com";        // email ID of Sender.        String sender = "sender@gmail.com";        // using host as localhost        String host = "127.0.0.1";        // Getting system properties        Properties properties = System.getProperties();        // Setting up mail server        properties.setProperty("mail.smtp.host", host);        // creating session object to get properties        Session session = Session.getDefaultInstance(properties);        try        {            // MimeMessage object.            MimeMessage message = new MimeMessage(session);            // Set From Field: adding senders email to from field.            message.setFrom(new InternetAddress(sender));            // Set To Field: adding recipient's email to from field.            message.addRecipient(Message.RecipientType.TO, new InternetAddress(recipient));            // Set Subject: subject of the email            message.setSubject("This is Suject");            // creating first MimeBodyPart object            BodyPart messageBodyPart1 = new MimeBodyPart();             messageBodyPart1.setText("This is body of the mail");            // creating second MimeBodyPart object            BodyPart messageBodyPart2 = new MimeBodyPart();             String filename = "attachment.txt"            DataSource source = new FileDataSource(filename);              messageBodyPart2.setDataHandler(new DataHandler(source));              messageBodyPart2.setFileName(filename);              // creating MultiPart object            Multipart multipartObject = new MimeMultipart();              multipartObject.addBodyPart(messageBodyPart1);              multipartObject.addBodyPart(messageBodyPart2);            // set body of the email.            message.setContent(multipartObject);            // Send email.            Transport.send(message);            System.out.println("Mail successfully sent");        }        catch (MessagingException mex)         {            mex.printStackTrace();        }    }}

输出:

Mail successfully sent

注意:这里我们用localhost SMTP server发送邮件。如果你想用例如 Gmail, Yahoo等客户端发送邮件,那么你就得用respective SMTP server主机地址。

原创粉丝点击