下面代码是利用 Java Mail 包封装了一个发送邮件的类
استيراد java.io.file ؛ استيراد java.util.arraylist ؛ استيراد java.util.date ؛ استيراد java.util.list ؛ استيراد java.util.properties ؛ استيراد javax.activation.datahandler javax.mail.multipart ؛ import javax.mail.session ؛ import javax.mail.transport ؛ import javax.internet.addressexception ؛ import javax.internet.internetaddres javax.mail.internet.mimemultipart ؛ الفئة العامة sendmail {private Static Final String Mail_address_regex = "^[// w //. السلسلة الخاصة mailserver ؛ مرسل سلسلة خاصة سلسلة خاصة [] المتلقي ؛ sendmail public () {} public void setMailbasicInfo (سلسلة mailserver ، مرسل السلسلة ، مستقبل السلسلة) {this.mailserver = mailserver ؛ this.sender = المرسل ؛ this.receiver = receiver.split ("،") ؛ } public void setmailbasicinfo (سلسلة mailserver ، مرسل السلسلة ، سلسلة [] مستخدمين) {this.mailserver = mailserver ؛ this.sender = المرسل ؛ this.receiver = المستخدمين ؛ } public void setMailbasicInfo (سلسلة mailserver ، مرسل السلسلة ، قائمة <string> المستخدمين) {this.mailserver = mailserver ؛ this.sender = المرسل ؛ this.receiver = new string [user.size ()] ؛ user.toarray (this.receiver) ؛ } الإرسال المنطقي العام (موضوع السلسلة ، محتوى السلسلة ، قائمة <Tring> أسماء الملفات) {موضوع = موضوع null؟ "": الموضوع ؛ content = content == null؟ "": content ؛ خصائص الدعائم = خصائص جديدة () ؛ props.put ("mail.smtp.host" ، mailserver) ؛ جلسة الجلسة = session.getInstance (الدعائم ، فارغة) ؛ حاول {InternetAddress [] receiver = getReceiverList () ؛ if (receiver.length == 0) {system.out.println ("جهاز الاستقبال فارغ") ؛ العودة كاذبة } mimemessage msg = new mimemessage (الجلسة) ؛ msg.setfrom (New InternetAddress (Sender)) ؛ msg.setRecipients (message.RecipientType.to ، Receiver) ؛ msg.setsubject (الموضوع) ؛ msg.setsentDate (تاريخ جديد ()) ؛ حاوية multipart = جديد mimemultipart () ؛ mimebodypart textbodyPart = new MimebodyPart () ؛ textBodyPart.setContent (content.toString () ، "text/html ؛ charset = gbk") ؛ Container.AddbodyPart (TextBodyPart) ؛ doattachfile (حاوية ، أسماء الملفات) ؛ msg.setContent (حاوية) ؛ System.out.println ("ابدأ إرسال البريد") ؛ Transport.Send (MSG) ؛ System.out.println ("إرسال نجاح البريد") ؛ } catch (messagingException e) {system.out.println ("send mail fail") ؛ system.out.println (e) ؛ العودة كاذبة } catch (استثناء e) {return false ؛ } إعادة صواب ؛ } الإرسال المنطقي العام (موضوع السلسلة ، محتوى السلسلة) {إرجاع إرسال (الموضوع ، المحتوى ، فارغ) ؛ } الإرسال المنطقي العام (موضوع السلسلة) {return send (الموضوع ، null) ؛ } private void doattachfile (حاوية متعددة ، قائمة <string> أسماء الملفات) يلقي MessagingException {if (filenames == null || filenames.size () == 0) return ؛ لـ (اسم ملف السلسلة: أسماء الملفات) {file f = file new (filename) ؛ إذا (! f.isfile ()) متابعة ؛ System.out.println ("ملف الإرفاق هو:"+اسم الملف) ؛ mimebodypart fileBodyPart = new MimebodyPart () ؛ FileDataSource FDS = New FileDataSource (F) ؛ // 要发送的附件地址 filebodypart.setdatahandler (New Datahandler (FDS)) ؛ filebodypart.setfilename (fds.getName ()) ؛ // 设置附件的名称 container.addbodyPart (filebodypart) ؛ }} private InternetAddress [] getReceiverList () يلقي العنوان {ArrayList <NetherAdDress> tolist = new ArrayList <NetherAddress> () ؛ من أجل (int i = 0 ؛ i <requiver.length ؛ ++ i) {if (receiver [i] .matches (mail_address_regex)) {tolist.add (new InternetAddress (جهاز الاستقبال [i])) ؛ }} return (InternetAddress []) tolist.toarray (New InternetAddress [tolist.size ()]) ؛ }}使用举例
string host = "168.xx.xx.xx" ؛ // 邮件服务器的地址 string obser = "发送邮件的主题" ؛ string sender = "[email protected]" ؛ قائمة <Tring> مستقبلات = new arraylist <string> () ؛ revivers.add ("[email protected]") أجهزة الاستقبال) ؛ sendmail.send (الموضوع ، المحتوى ، فارغ) ؛ // 没有附件
正文也可以是 HTML 内容 , 如
content content = "<html> 详细信息 : <a href = 'xxxx'> 请点击查看! </a> </html>" ؛
我们再来看一个封装好的类
حزمة com.message.base.email ؛ استيراد com.message.base.spring.applicationHelper ؛ import com.message.base.utils.stringutils ؛ import com.message.base.utils.validateutils ؛ import org.slf4j.logger ؛ import org.slf4j.loggerfactory ؛ استيراد javax.mail.*؛ import javax.mail.internet.internetaddress ؛ import javax.internet.mimemessage ؛ import java.util.collections ؛ import java.util.date ؛ import java.util.list /*** 发送邮件服务器. * * Author Sunhao ([email protected]) * version v1.0 ، 13-3-25 上午 6:19 */public class emailserver {private static final logger = loggerfactory.getLogger (emailSerServer.class) ؛ // Spring 中配置/** 邮箱服务器配置 **/list private <MailConfig> config ؛ / ** 是否开启 debug 调试模式 **/ private boolean iSdebug = false ؛ / ** 是否启用身份验证 **/ isauth boolean الخاص = صحيح ؛ / ** 验证类型 **/ private string authtype = "auth" ؛ / ** * 私有化默认构造器 ، 使外部不可实例化 */ private emailServer () {}/ ** * 单例 ، 保证上下文中只有一个 eMailSserver * * regurn emailServer */ public static emailserver getInstance () {return ApplicationHelper.getInstance (). } / ** * 发送普通邮件 (单个接收人) * * param username 发件人用户名 * param password 发件人密码 * param title 邮件标题 * param content 邮件正文 * param receiver 单个接收人 * @retur collections.singletonlist (جهاز الاستقبال)) ؛ } / *: if (this.isauth ()) {// 如果需要身份认证 , 则创建一个密码验证器 upd = مصادقة جديدة (اسم المستخدم ، كلمة المرور) ؛ } Properties Props = New Properties () ؛ props.setProperty ("mail.smtp.auth" ، this.isauth ()؟ "true": "false") ؛ props.setProperty ("mail.transport.protocol" ، "Auth") ؛ EmailConfig config = this.getEmailConfig (اسم المستخدم) ؛ props.setProperty ("mail.smtp.host" ، config.getsmtp ()) ؛ props.setProperty ("mail.smtp.port" ، config.getport () + "") ؛ // 根据邮件会话属性和密码验证器构造一个发送邮件的 جلسة الجلسة = session.getDefaultInstance (الدعائم ، AUTH) ؛ Session.setDebug (this.isdebug) ؛ رسالة رسالة = this.maketextMail (الجلسة ، العنوان ، المحتوى ، اسم المستخدم ، أجهزة الاستقبال ، خطأ) ؛ حاول {transport.send (message) ؛ العودة صحيح. } catch (messagingException e) {logger.error (e.getMessage () ، e) ؛ العودة كاذبة } ستر المحتوى ، collections.singletonlist (المتلقي)) ؛ } / *: if (this.isauth ()) {// 如果需要身份认证 , 则创建一个密码验证器 upd = مصادقة جديدة (اسم المستخدم ، كلمة المرور) ؛ } Properties Props = New Properties () ؛ props.setProperty ("mail.smtp.auth" ، this.isauth ()؟ "true": "false") ؛ props.setProperty ("mail.transport.protocol" ، "Auth") ؛ EmailConfig config = this.getEmailConfig (اسم المستخدم) ؛ props.setProperty ("mail.smtp.host" ، config.getsmtp ()) ؛ props.setProperty ("mail.smtp.port" ، config.getport () + "") ؛ // 根据邮件会话属性和密码验证器构造一个发送邮件的 جلسة الجلسة = session.getDefaultInstance (الدعائم ، AUTH) ؛ Session.setDebug (this.isdebug) ؛ رسالة رسالة = this.maketextMail (الجلسة ، العنوان ، المحتوى ، اسم المستخدم ، أجهزة الاستقبال ، صواب) ؛ حاول {transport.send (message) ؛ العودة صحيح. } catch (messagingException e) {logger.error (e.getMessage () ، e) ؛ العودة كاذبة }} / ** * 获取邮件服务器配置 * * param email 邮箱地址 * @regurn * / private emailConfig getEmailConfig (سلسلة البريد الإلكتروني) {String mailservedomainname = this.getMailServateDomainName (البريد الإلكتروني) ؛ لـ (emailConfig config: this.config) {if (config.getName (). equals (mailServedOmainName)) {return config ؛ }} الإرجاع null ؛ } / ** * 创建邮件 message * * param الجلسة 根据配置获得的 الجلسة * param العنوان 邮件主题 * param content 邮件的内容 * param من 发件者 * param استقبال 收件者 * @param ishtmlmail 是否是 html mimemessage (جلسة) ؛ حاول { / ** 标题 ** / logger.info ("عنوان هذا البريد هو {}" ، title) ؛ message.SetSubject (title) ؛ / ** 内容 **/ logger.info ("محتوى هذا البريد هو {}" ، المحتوى) ؛ if (ishtmlmail) {// 是 html 邮件 message.setContent (المحتوى ، "text/html ؛ charset = utf-8") ؛ } آخر {// 普通邮件 message.settext (content) ؛ } / ** 发件者地址 ** / logger.info ("مرسل البريد هذا {}" ، من) ؛ العنوان من adaddress = new InternetAddress (من) ؛ message.setFrom (FromAddress) ؛ / ** 接收者地址 **/ address [] tos = new InternetAddress [recivers.size ()] ؛ لـ (int i = 0 ؛ i <استقبال. if (ValateUtils.isemail (جهاز الاستقبال)) {tos [i] = new InternetAddress (جهاز الاستقبال) ؛ }} / ** 发件时间 ** / message.setsentDate (Date ()) ؛ message.setRecipients (message.recipienttype.to ، toS) ؛ } catch (messagingException e) {logger.error (e.getMessage () ، e) ؛ E.PrintStackTrace () ؛ } رسالة الإرجاع ؛ } / ** * 获取邮箱域名 * * param email 邮箱 * return * / private string getMailServedOmainName (سلسلة البريد الإلكتروني) {if (stringUtils.isempty (البريد الإلكتروني)) {return "" " } else {int firstIndex = stringUtils.Indexof (البريد الإلكتروني ، "@") ؛ int supmentIndex = StringUtils.lastIndexof (البريد الإلكتروني ".") ؛ return stringUtils.subString (البريد الإلكتروني ، FirstIndex + 1 ، SINDINDEX) ؛ }} القائمة العامة <MailConfig> getConfig () {return config ؛ } public void setConfig (قائمة <MailConfig> config) {this.config = config ؛ } boolean public Isdebug () {return isDebug ؛ } public void setDebug (boolean debug) {isDebug = debug ؛ } boolean isauth () {return Isauth ؛ } public void setauth (boolean auth) {isauth = auth ؛ } السلسلة العامة getauthtype () {return authtype ؛ } public void setauthtype (string authtype) {this.authtype = authtype ؛ }}
调用方式如下
Boolean SendMail () يلقي الاستثناء {List <String> أجهزة الاستقبال = ArrayList New ArrayList <String> () ؛ أجهزة الاستقبال ("[email protected]") ؛ أجهزة الاستقبال ("[email protected]") ؛ EmailSerServer.getInstance (). sendhtmlmail ("[email protected]" ، "这里是密码" ، "测试发送 html 邮件" ، "<span style = 'color: red ؛ font-size: 20pt'> 测试发送 html 邮件 </span> <a href = 'http: //www.baidu.com' Target = '_ Blank'> 链接到百度 </a> "، أجهزة الاستقبال) ؛ return elemtserServer.getInstance (). SendTextMail ("[email protected]" ، "这里是密码" ، "测试发送文本邮件" ، "测试发送文本邮件测试发送文本邮件测试发送文本邮件" ، أجهزة الاستقبال) ؛}ملاحظة: 正在考虑扩展 ، 如果把这几个类封在 جرة 包中 ، 如何进行邮件服务器配置的扩展.
如有不好之处 ، 欢迎拍砖.