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("user@gmail.com"); 60 email.setSubject("TestMail"); 61 email.setMsg("This is a test mail ... :-)"); 62 email.addTo("foo@bar.com"); 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("jdoe@somewhere.org", "John Doe"); 98 email.setFrom("me@apache.org", "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("jdoe@somewhere.org", "John Doe"); 137 email.setFrom("me@apache.org", "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("jdoe@somewhere.org", "John Doe"); 179 email.setFrom("me@apache.org", "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("jdoe@somewhere.org", "John Doe"); 226 email.setFrom("me@apache.org", "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("liwenzlw@163.com", "xxxxxxxxxxxxx")); 244 email.setSSLOnConnect(true); 245 email.setFrom("liwenzlw@163.com", "利文"); 246 email.setSubject("异常信息"); 247 email.setMsg("This is a test mail ... :-)"); 248 email.addTo("1309928657@qq.com"); 249 email.send(); 250 } 251 }