java 实现邮件推送
Java实现邮件推送功能
一、引入依赖
- <dependency><br> <groupId>org.apache.commons</groupId><br> <artifactId>commons-email</artifactId><br> <version>1.4</version><br> </dependency>
复制代码 二、邮件来源用户信息
- private static Logger log = Log.getLogger();<br>private static ThreadPoolExecutor threadPool;<br>private static String emailServer;<br>private static String userName;<br>private static String password;<br>private static String emailEncoding;<br>private static String emailFrom;<br>private static String sysEmailFromName;<br>private static String encoding;<br> <br>private static void initMail(Email mail) throws EmailException {<br> mail.setHostName(emailServer);<br> mail.setAuthentication(userName, password);<br> mail.setCharset(emailEncoding);<br> mail.setFrom(emailFrom, sysEmailFromName);<br>}
复制代码 三、线程池异步
- static {<br> threadPool = new ThreadPoolExecutor(5, 10, 3L, TimeUnit.SECONDS, new ArrayBlockingQueue(50), new ThreadPoolExecutor.DiscardPolicy());<br> //邮箱服务器地址<br> emailServer = "smtp.163.com";<br> //用户名<br> userName = "****";<br> //用户密码<br> password = "****";<br> //编码格式<br> emailEncoding = "GBK";<br> //邮件来源<br> emailFrom = "*****.com.cn";<br> //邮件来源用户名称<br> sysEmailFromName = "****";<br> //编码格式<br> encoding = "UTF-8";<br>}<br>
复制代码 四、异步发送
- private static void sendMail(Email mail) {<br> threadPool.execute(new Runnable() {<br> @Override<br> public void run() {<br> try {<br> mail.send();<br> } catch (EmailException var2) {<br> log.error("[邮件抄送失败]-", var2);<br> }<br> }<br> });<br> }
复制代码 五 完备发送- import org.apache.commons.lang.StringUtils;<br>import org.apache.commons.mail.*;<br>import org.slf4j.Logger;<br><br>import javax.mail.internet.MimeUtility;<br>import java.io.File;<br>import java.io.UnsupportedEncodingException;<br>import java.util.Arrays;<br>import java.util.List;<br>import java.util.concurrent.ArrayBlockingQueue;<br>import java.util.concurrent.ThreadPoolExecutor;<br>import java.util.concurrent.TimeUnit;<br><br>/**<br> * 邮件发送工具<br> */<br>public class MailUtil {<br><br> private static Logger log = Log.getLogger();<br> private static ThreadPoolExecutor threadPool;<br> private static String emailServer;<br> private static String userName;<br> private static String password;<br> private static String emailEncoding;<br> private static String emailFrom;<br> private static String sysEmailFromName;<br> private static String encoding;<br> <br> private static void initMail(Email mail) throws EmailException {<br> mail.setHostName(emailServer);<br> mail.setAuthentication(userName, password);<br> mail.setCharset(emailEncoding);<br> mail.setFrom(emailFrom, sysEmailFromName);<br> }<br> <br> static {<br> threadPool = new ThreadPoolExecutor(5, 10, 3L, TimeUnit.SECONDS, <br> new ArrayBlockingQueue(50), <br> new ThreadPoolExecutor.DiscardPolicy());<br> //邮箱服务器地址<br> emailServer = "mailha.sinosafe.local";<br> //用户名<br> userName = "****";<br> //用户密码<br> password = "****";<br> //编码格式<br> emailEncoding = "GBK";<br> //邮件来源<br> emailFrom = "*****.com.cn";<br> //邮件来源用户名称<br> sysEmailFromName = "****";<br> //编码格式<br> encoding = "UTF-8";<br> }<br> <br> /**<br> * 异步发送邮件<br> */<br> private static void sendMail(Email mail) {<br> threadPool.execute(new Runnable() {<br> @Override<br> public void run() {<br> try {<br> mail.send();<br> } catch (EmailException var2) {<br> log.error("[邮件抄送失败]-", var2);<br> }<br> }<br> });<br> }<br> <br> /**<br> * 抄送郵件<br> */<br> public static void bccHtmlEmail(String subject, String html, List<String> users) throws Exception {<br> HtmlEmail email = new HtmlEmail();<br> initMail(email);<br> email.setSubject(subject);<br> for (String r : users){<br> email.addBcc(r);<br> }<br> email.setHtmlMsg(html);<br> email.setTextMsg("Your email client does not support HTML messages");<br> sendMail(email);<br> }<br> <br> /**<br> * 单附件邮件<br> */<br> public static void sendEmailWithFile(String subject, String html, List<String> receivers, <br> File file) throws UnsupportedEncodingException {<br> //附件<br> EmailAttachment att1 = new EmailAttachment();<br> att1.setPath(file.getPath());<br> att1.setDisposition(EmailAttachment.ATTACHMENT);<br> att1.setDescription("attachemnt description gril 中文");<br> att1.setName(MimeUtility.encodeText(file.getName()));<br> MultiPartEmail email = new MultiPartEmail();<br> email.setHostName(emailServer);<br> email.setAuthentication(userName, password);<br> email.setCharset(emailEncoding);<br> email.setSubject(subject);<br> try {<br> email.setMsg(html);<br> for (String user : receivers) {<br> email.addTo(user);<br> }<br> email.setFrom(emailFrom, sysEmailFromName); <br> email.attach(att1); <br> email.send();<br> } catch (EmailException e1) {<br> e1.printStackTrace();<br> }<br> }<br> <br> public static void sendEmailMultifile(String subject, String html, List<String> receivers,<br> List<File> files){<br> HtmlEmail email = new HtmlEmail();<br> email.setHostName(emailServer);<br> email.setAuthentication(userName, password);<br> email.setCharset(emailEncoding);<br> email.setSubject(subject);<br> try {<br> for (String user : receivers) {<br> email.addTo(user);<br> }<br> email.setFrom(emailFrom, sysEmailFromName);<br> email.setHtmlMsg(html);<br> //附件<br> for(File f : files){<br> EmailAttachment att1 = new EmailAttachment();<br> att1.setPath(f.getPath());<br> att1.setDisposition(EmailAttachment.ATTACHMENT);<br> att1.setDescription("attachemnt description gril 中文"); //附件描述<br> //防止附件名乱码<br> att1.setName(MimeUtility.encodeText(f.getName())); <br> email.attach(att1);<br> }<br> email.send();<br> }catch (EmailException | UnsupportedEncodingException e1) {<br> e1.printStackTrace();<br> }<br> }<br> <br> /**<br> * 抄送郵件<br> */<br> public static void ccHtmlEmail(String subject, String html, String receiver, String cc) <br> throws Exception {<br> ccHtmlEmail(subject, html, Arrays.asList(receiver.split(",")), cc, null);<br> }<br><br> /**<br> * 抄送郵件带附件<br> */<br> public static void ccHtmlEmail(String subject, String html, String receiver, String cc, File file) <br> throws Exception {<br> ccHtmlEmail(subject, html, Arrays.asList(receiver.split(",")), cc, file);<br> }<br><br>}
复制代码 五、总结
Java实现邮件发送,可以异步使用线程池批量发送多人,减小服务器的压力,可以发送单页面(可以是html语言写的页面),也可以单附件大概多附件发送邮件。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |