下面代码是利用 Java Mail 包封装了一个发送邮件的类
Import Java.io.file; Import Java.util.ArrayList; Import Java.util.date; Import Java.util.List; Import Java.util.Properties; Import Javax.Activation.Datahandler; javax.mail.multipart; import Javax.mail javax.mail.internet.mimemultiPart; öffentliche Klasse Sendmail {private statische endgültige String mail_address_regex = "^[// w //.=- weibliche =; private String MailServer; privater String -Absender; private Zeichenfolge [] Empfänger; public sendmail () {} public void setmailBasicinfo (String MailServer, String -Absender, String -Empfänger) {this.mailserver = mailserver; this.sender = sender; this.Receiver = receiver.split (","); } public void setmailBasicinfo (String mailserver, String -Absender, String [] Benutzer) {this.mailserver = mailServer; this.sender = sender; this.Receiver = Benutzer; } public void setmailBasicinfo (String mailserver, String -Absender, Liste <string> Benutzer) {this.mailserver = mailserver; this.sender = sender; this.Receiver = new String [user.size ()]; user.toArray (this.Receiver); } public boolean send (String -Betreff, String -Inhalt, Liste <string> Dateinamen) {Subjekt = Subjekt == NULL? "": Betreff; content = content == null? "": content; Eigenschaften props = neue Eigenschaften (); props.put ("mail.smtp.host", MailServer); Session Session = Session.getInstance (Props, NULL); try {InternetAddress [] receiver = getReceiverList (); if (receiver.length == 0) {System.out.println ("Empfänger ist null"); false zurückgeben; } Mimemessage msg = new Mimemessage (Sitzung); MSG.SetFrom (neue InternetAtaddress (Absender)); msg.setRecipients (Message.RecipientType.to, Empfänger); msg.setsubject (Subjekt); MSG.SetSentDate (neues Datum ()); Multipart Container = new Mimemultipart (); Mimebodypart textBodypart = new Mimebodypart (); textBodypart.setContent (content.toString (), "text/html; charSet = gbk"); Container.Addbodypart (textBodypart); Doattachfile (Container, Dateinamen); MSG.SetContent (Container); System.out.println ("Senden Sie Mail an"); Transport.Send (MSG); System.out.println ("Mail -Erfolg senden"); } catch (MessagingException e) {System.out.println ("Mail fehlschlägen"); System.out.println (e); false zurückgeben; } catch (Ausnahme e) {return false; } Return true; } public boolean send (String -Betreff, String -Inhalt) {return send (Betreff, Inhalt, NULL); } public boolean send (String -Betreff) {return send (Betreff, NULL); } private void doattachFile (MultiPart -Container, Liste <string> Dateinamen) löst MessagingException {if (Dateinamen == null || fileName.size () == 0) zurück; für (String Dateiname: Dateinamen) {Datei f = neue Datei (Dateiname); if (! f.isfile ()) weiter; System.out.println ("Die Anhangsdatei ist:"+Dateiname); Mimebodypart FileBodypart = new Mimebodypart (); FieledataSource fds = new fileedataSource (f); // 要发送的附件地址 FileBodypart.setDatahandler (New Datahandler (FDS)); FileBodypart.setFileName (fds.getName ()); // 设置附件的名称 container.addbodypart (DateiBodypart); }} private InternetAddress [] getReceiverList () löst die AdressException aus {ArrayList <CTEMTADDress> tolist = new ArrayList <CTANTADDress> (); für (int i = 0; i <receiver.length; ++ i) {if (receiver [i] .Matches (mail_address_regex)) {tolist.add (neuer InternetAddress (Empfänger [i])); }} return (InternetAddress []) tolist.toArray (New InternetAddress [tolist.size ()]); }}使用举例
String host = "168.xx.xx.xx"; // 邮件服务器的地址 String betreffend = "发送邮件的主题"; String Sender = "[email protected]"; LIST <string> recivers = new ArrayList <string> (); recivers.add ("[email protected]"); recivers.add ("[email protected]"); String content = "邮件主题 Sendmail, sendmail = newMail (newMail); Empfänger); sendmail.send (Betreff, Inhalt, NULL); // 没有附件
正文也可以是 html 内容 , 如
String content = "<html> 详细信息 : <a href = 'xxxx'> 请点击查看! </a> </html>";
我们再来看一个封装好的类
Paket com.message.base.email; import com.message.base.spring.applicationHelper; import com.message.base.utils.stringutils; import com.message.base Javax.mail importieren. /*** 发送邮件服务器. * * @Author Sunhao ([email protected]) * @version v1.0, 13-3-25 上午 6:19 */public class EmailServer {private statische endgültige Logger logger = loggerfactory.getLogger (E-Mailserver.class); // Spring 中配置/** 邮箱服务器配置 **/private Liste <Emailconfig> config; / ** 是否开启 debug 调试模式 **/ privat boolean isdebug = false; / ** 是否启用身份验证 **/ privat boolean isauth = true; / ** 验证类型 **/ private String authtype = "auth"; / ** * 私有化默认构造器, 使外部不可实例化 */ private E -MailServer () {}/ ** * 单例, 保证上下文中只有一个 E -MailServer * * @return EmailServer */ public static EmailServer getInstance () {return ApplicationHelper.getInstance (). GetBean (E -MailServer.class); } / ** * 发送普通邮件 (单个接收人) * * @param userername 发件人用户名 * @param password 发件人密码 * @param title 邮件标题 * @param content 邮件正文 * @param receiver 单个接收人 * @return * / public boolean sendTextmail (String -Benutzername, String -Passwort, String -Inhalt, String -Inhalt, Empfänger von String) {Rückgabe dieses. Collections.SingletonList (Empfänger)); } / ** * 发送普通邮件 (多个接收人) * * @param userername 发件人用户名 * @param password 发件人密码 * @param title 邮件标题 * @param content 邮件正文 * @param recivers 多个接收人 * @return * / public boolean sendTextmail (String -Benutzername, String -Passwort, String -Titel, Liste <string> Empfänger) {Authentifizierung authentifiziert = null; if (this.isauth ()) {// 如果需要身份认证 , 则创建一个密码验证器 则创建一个密码验证器 auth = new Authentifizierung (Benutzername, Passwort); } Eigenschaften props = neue Eigenschaften (); props.setProperty ("mail.smtp.auth", this.isauth ()? "True": "False"); props.setProperty ("mail.transport.protocol", "auth"); E -MailConfig config = this.getEmailConfig (Benutzername); props.setProperty ("mail.smtp.host", config.getSmtp ()); props.setProperty ("mail.smtp.port", config.getport () + ""); // 根据邮件会话属性和密码验证器构造一个发送邮件的 Sitzung Sitzung Session = Session.getDefaultInstance (Props, Auth); Session.setDebug (this.isdebug); Message message = this.makeTextMail (Sitzung, Titel, Inhalt, Benutzername, Empfänger, Falsch); try {transport.Send (message); zurückkehren; } catch (MessagingException e) {logger.Error (e.getMessage (), e); false zurückgeben; } } /** * 发送HTML邮件(单个接收人) * * @param username 发件人用户名 * @param password 发件人密码 * @param title 邮件标题 * @param content 邮件正文 * @param receiver 单个接收人 * @return */ public boolean sendHtmlMail(String username, String password, String title, String content, String receiver){ return this.sendHtmlMail(username, password, title, Inhalt, Sammlungen.singletonList (Empfänger)); } / ** * 发送 html 邮件 (多个接收人) * * @param userername 发件人用户名 * @param password 发件人密码 * @param title 邮件标题 * @param content 邮件正文 * @param recivers 多个接收人 * @return * / public boolean sendhtmlmail (String username, String -Passwort, String -Inhalt, List, Listen <String> {String) {Anhänger) {{{Authentifizierungsförderung; if (this.isauth ()) {// 如果需要身份认证 , 则创建一个密码验证器 则创建一个密码验证器 auth = new Authentifizierung (Benutzername, Passwort); } Eigenschaften props = neue Eigenschaften (); props.setProperty ("mail.smtp.auth", this.isauth ()? "True": "False"); props.setProperty ("mail.transport.protocol", "auth"); E -MailConfig config = this.getEmailConfig (Benutzername); props.setProperty ("mail.smtp.host", config.getSmtp ()); props.setProperty ("mail.smtp.port", config.getport () + ""); // 根据邮件会话属性和密码验证器构造一个发送邮件的 Sitzung Sitzung Session = Session.getDefaultInstance (Props, Auth); Session.setDebug (this.isdebug); Message message = this.makeTextMail (Sitzung, Titel, Inhalt, Benutzername, Empfänger, true); try {transport.Send (message); zurückkehren; } catch (MessagingException e) {logger.Error (e.getMessage (), e); false zurückgeben; }} / ** * 获取邮件服务器配置 * * @param E -Mail 邮箱地址 * @return * / private E -MailConfig getemailConfig (String -E -Mail) {String mailServicedomainname = this.getmailServicedomainName (E -Mail); für (E -MailConfig -Konfiguration: this.config) {if (config.getName (). Equals (mailservicedomainName)) {return config; }} return null; } /** * 创建邮件message * * @param session 根据配置获得的session * @param title 邮件主题 * @param content 邮件的内容 * @param from 发件者 * @param receivers 收件者 * @param isHtmlMail 是否是html邮件 */ private Message makeTextMail(Session session, String title, String content, String from, List<String> receivers, boolean isHtmlMail){ Message message = new Mimemessage (Sitzung); try { / ** 标题 ** / logger.info ("Der Titel dieser Mail ist {}", Titel); Message.Setsubject (Titel); / ** 内容 **/ logger.info ("Der Inhalt dieser Mail ist {}", Inhalt); if (iShtmlmail) {// 是 html 邮件 message.setContent (Inhalt, "text/html; charSet = utf-8"); } else {// 普通邮件 message.setText (Inhalt); } / ** 发件者地址 ** / logger.info ("Der Absender dieser Mail ist {}", von); Adresse vonaddress = new InternetAddress (von); message.setfrom (fromAddress); / ** 接收者地址 **/ address [] tos = new InternetAddress [Empfänger.SIZE ()]; für (int i = 0; i <receivers.size (); i ++) {String receiver = receivers.get (i); if (validateUtils.isemail (Empfänger)) {tOS [i] = new InternetAtaddress (Empfänger); }} / ** 发件时间 ** / message.setSentDate (new Date ()); message.setRecipients (Message.RecipientType.to, tos); } catch (MessagingException e) {logger.Error (e.getMessage (), e); E. printstacktrace (); } Rückgabenachricht; } / ** * 获取邮箱域名 * * @param E -Mail 邮箱 * @return * / private String getmailServicedOmAnname (String -E -Mail) {if (stringutils.isempty (E -Mail)) {return ""; } else {int firstIndex = stringutils.indexof (E -Mail, "@"); int SecondIndex = Stringutils.lastIndexof (E -Mail, "). return stringutils.substring (E -Mail, FirstIndex + 1, SecondIndex); }} publiclist <Emailconfig> getConfig () {return config; } public void setConfig (Liste <Emailconfig> config) {this.config = config; } public boolean isdebug () {return isdebug; } public void setdebug (boolean debug) {isdebug = debug; } public boolean isauth () {return isauth; } public void setAuth (boolean auth) {isauth = auth; } public String getAuthType () {return authType; } public void setAuthType (String authType) {this.authtype = authottype; }}
调用方式如下
public boolean sendmail () löst Ausnahme aus {list <string> recivers = new ArrayList <string> (); receivers.add ("[email protected]"); receivers.add ("[email protected]"); EmailServer.getInstance (). target = '_ leer'> 链接到百度 </a> ", Empfänger); E -MailServer.getInstance (). SendTextmail ("[email protected]", "这里是密码", "测试发送文本邮件", "测试发送文本邮件测试发送文本邮件测试发送文本邮件", Empfänger);}PS: 正在考虑扩展, 如果把这几个类封在 Jar 包中, 如何进行邮件服务器配置的扩展.
如有不好之处, 欢迎拍砖.