使用Apache Commons Email 发生邮件

Posted Cristin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Apache Commons Email 发生邮件相关的知识,希望对你有一定的参考价值。

Apache Commons Email的Maven依赖

1 <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-email -->
2 <dependency>
3     <groupId>org.apache.commons</groupId>
4     <artifactId>commons-email</artifactId>
5     <version>1.4</version>
6 </dependency>

使用示例:

  1 package app.hihn.me.mail.demo;
  2 
  3 import java.net.MalformedURLException;
  4 import java.net.URL;
  5 
  6 import org.apache.commons.mail.DefaultAuthenticator;
  7 import org.apache.commons.mail.Email;
  8 import org.apache.commons.mail.EmailAttachment;
  9 import org.apache.commons.mail.EmailException;
 10 import org.apache.commons.mail.htmlEmail;
 11 import org.apache.commons.mail.ImageHtmlEmail;
 12 import org.apache.commons.mail.MultiPartEmail;
 13 import org.apache.commons.mail.SimpleEmail;
 14 import org.apache.commons.mail.resolver.DataSourceUrlResolver;
 15 
 16 /**
 17  * 
 18  * <pre>
 19  * <h1>Debugging</h1>
 20  * The JavaMail API supports a debugging option that will can be very
 21  * useful if you run into problems. You can activate debugging on any of the
 22  * mail classes by calling setDebug(true). The debugging output will be written
 23  * to System.out.
 24  * 
 25  * Sometimes you want to experiment with various security setting or features of
 26  * commons-email. A good starting point is the test class EmailLiveTest and
 27  * EmailConfiguration which are used for testing commons-email with real SMTP
 28  * servers.
 29  * 
 30  * </pre>
 31  * 
 32  * @describe Apache Commons Email 使用示例
 33  * @author liwen
 34  * 
 35  */
 36 public class SendEmailDemo {
 37     /**
 38      * <pre>
 39      * 
 40      * Our first example will create a basic email message to "John Doe" and
 41      * send it through your Google Mail (GMail) account.
 42      * 
 43      * The call to setHostName("mail.myserver.com") sets the address of the outgoing SMTP
 44      * server that will be used to send the message. If this is not set, the
 45      * system property "mail.host" will be used.
 46      * 
 47      * </pre>
 48      * 
 49      * @describe 发送内容为简单文本的邮件
 50      * @throws EmailException
 51      */
 52     public static void sendSimpleTextEmail() throws EmailException {
 53         Email email = new SimpleEmail();
 54         email.setHostName("smtp.googlemail.com");
 55         email.setSmtpPort(465);
 56         // 用户名和密码为邮箱的账号和密码(不需要进行base64编码)
 57         email.setAuthenticator(new DefaultAuthenticator("username", "password"));
 58         email.setSSLOnConnect(true);
 59         email.setFrom("[email protected]");
 60         email.setSubject("TestMail");
 61         email.setMsg("This is a test mail ... :-)");
 62         email.addTo("[email protected]");
 63         email.send();
 64     }
 65 
 66     /**
 67      * <pre>
 68      * 
 69      * To add attachments to an email, you will need to use the MultiPartEmail
 70      * class. This class works just like SimpleEmail except that it adds several
 71      * overloaded attach() methods to add attachments to the email. You can add
 72      * an unlimited number of attachments either inline or attached. The
 73      * attachments will be MIME encoded.
 74      * 
 75      * The simplest way to add the attachments is by using the EmailAttachment
 76      * class to reference your attachments.
 77      * 
 78      * In the following example, we will create an attachment for a picture. We
 79      * will then attach the picture to the email and send it.
 80      * 
 81      * </pre>
 82      * 
 83      * @describe 发送包含附件的邮件(附件为本地资源)
 84      * @throws EmailException
 85      */
 86     public static void sendEmailsWithAttachments() throws EmailException {
 87         // Create the attachment
 88         EmailAttachment attachment = new EmailAttachment();
 89         attachment.setPath("mypictures/john.jpg");
 90         attachment.setDisposition(EmailAttachment.ATTACHMENT);
 91         attachment.setDescription("Picture of John");
 92         attachment.setName("John");
 93 
 94         // Create the email message
 95         MultiPartEmail email = new MultiPartEmail();
 96         email.setHostName("mail.myserver.com");
 97         email.addTo("[email protected]", "John Doe");
 98         email.setFrom("[email protected]", "Me");
 99         email.setSubject("The picture");
100         email.setMsg("Here is the picture you wanted");
101 
102         // add the attachment
103         email.attach(attachment);
104 
105         // send the email
106         email.send();
107     }
108 
109     /**
110      * <pre>
111      * 
112      * You can also use EmailAttachment to reference any valid URL for files
113      * that you do not have locally. When the message is sent, the file will be
114      * downloaded and attached to the message automatically.
115      * 
116      * The next example shows how we could have sent the apache logo to John
117      * instead.
118      * 
119      * </pre>
120      * 
121      * @describe 发送包含附件的邮件(附件为在线资源)
122      * @throws EmailException
123      * @throws MalformedURLException
124      */
125     public static void sendEmailsWithOnlineAttachments() throws EmailException, MalformedURLException {
126         // Create the attachment
127         EmailAttachment attachment = new EmailAttachment();
128         attachment.setURL(new URL("http://www.apache.org/images/asf_logo_wide.gif"));
129         attachment.setDisposition(EmailAttachment.ATTACHMENT);
130         attachment.setDescription("Apache logo");
131         attachment.setName("Apache logo");
132 
133         // Create the email message
134         MultiPartEmail email = new MultiPartEmail();
135         email.setHostName("mail.myserver.com");
136         email.addTo("[email protected]", "John Doe");
137         email.setFrom("[email protected]", "Me");
138         email.setSubject("The logo");
139         email.setMsg("Here is Apache‘s logo");
140 
141         // add the attachment
142         email.attach(attachment);
143 
144         // send the email
145         email.send();
146     }
147 
148     /**
149      * <pre>
150      * 
151      * Sending HTML formatted email is accomplished by using the HtmlEmail
152      * class. This class works exactly like the MultiPartEmail class with
153      * additional methods to set the html content, alternative text content if
154      * the recipient does not support HTML email, and add inline images.
155      * 
156      * In this example, we will send an email message with formatted HTML
157      * content with an inline image.
158      * 
159      * First, notice that the call to embed() returns a String. This String is a
160      * randomly generated identifier that must be used to reference the image in
161      * the image tag.
162      * 
163      * Next, there was no call to setMsg() in this example. The method is still
164      * available in HtmlEmail but it should not be used if you will be using
165      * inline images. Instead, the setHtmlMsg() and setTextMsg() methods were
166      * used.
167      * 
168      * <pre>
169      * 
170      * @describe 发送内容为HTML格式的邮件
171      * @throws EmailException
172      * @throws MalformedURLException
173      */
174     public static void sendHTMLFormattedEmail() throws EmailException, MalformedURLException {
175         // Create the email message
176         HtmlEmail email = new HtmlEmail();
177         email.setHostName("mail.myserver.com");
178         email.addTo("[email protected]", "John Doe");
179         email.setFrom("[email protected]", "Me");
180         email.setSubject("Test email with inline image");
181 
182         // embed the image and get the content id
183         URL url = new URL("http://www.apache.org/images/asf_logo_wide.gif");
184         String cid = email.embed(url, "Apache logo");
185 
186         // set the html message
187         email.setHtmlMsg("<html>The apache logo - <img src=\"cid:" + cid + "\"></html>");
188 
189         // set the alternative message
190         email.setTextMsg("Your email client does not support HTML messages");
191 
192         // send the email
193         email.send();
194     }
195 
196     /**
197      * <pre>
198      * 
199      * The previous example showed how to create a HTML email with embedded
200      * images but you need to know all images upfront which is inconvenient when
201      * using a HTML email template. The ImageHtmlEmail helps you solving this
202      * problem by converting all external images to inline images.
203      * 
204      * First we create a HTML email template referencing some images. All
205      * referenced images are automatically transformed to inline images by the
206      * specified DataSourceResolver.
207      * 
208      * </pre>
209      * 
210      * @describe 发送内容为HTML格式的邮件(嵌入图片更方便)
211      * @throws MalformedURLException
212      * @throws EmailException
213      */
214     public static void sendHTMLFormattedEmailWithEmbeddedImages() throws MalformedURLException, EmailException {
215         // load your HTML email template
216         String htmlEmailTemplate = ".... <img src=\"http://www.apache.org/images/feather.gif\"> ....";
217 
218         // define you base URL to resolve relative resource locations
219         URL url = new URL("http://www.apache.org");
220 
221         // create the email message
222         ImageHtmlEmail email = new ImageHtmlEmail();
223         email.setDataSourceResolver(new DataSourceUrlResolver(url));
224         email.setHostName("mail.myserver.com");
225         email.addTo("[email protected]", "John Doe");
226         email.setFrom("[email protected]", "Me");
227         email.setSubject("Test email with inline image");
228 
229         // set the html message
230         email.setHtmlMsg(htmlEmailTemplate);
231 
232         // set the alternative message
233         email.setTextMsg("Your email client does not support HTML messages");
234 
235         // send the email
236         email.send();
237     }
238 
239     public static void main(String[] args) throws EmailException {
240         Email email = new SimpleEmail();
241         email.setHostName("smtp.163.com");
242         email.setSmtpPort(465);
243         email.setAuthenticator(new DefaultAuthenticator("[email protected]", "xxxxxxxxxxxxx"));
244         email.setSSLOnConnect(true);
245         email.setFrom("[email protected]", "利文");
246         email.setSubject("异常信息");
247         email.setMsg("This is a test mail ... :-)");
248         email.addTo("[email protected]");
249         email.send();
250     }
251 }

以上是关于使用Apache Commons Email 发生邮件的主要内容,如果未能解决你的问题,请参考以下文章

Tomcat中使用commons-io-2.5发生的错误java.lang.ClassNotFoundException: org.apache.commons.io.IOUtils

发生了啥:org.apache.ws.commons.schema.XmlSchemaCollection.read(InputSource)?

用commons-email,javax.mail发送邮件,中文附件名乱码。

Apache Commons Net FTP 正在上传损坏的文件

一个简单易用的邮件工具类库:Commons-Email

一个简单易用的邮件工具类库:Commons-Email