下面代码是利用 Java Mail 包封装了一个发送邮件的类
Impor java.io.file; impor java.util.arraylist; impor java.util.date; impor java.util.list; impor java.util.properties; Import Javax.Activation.DataHandler; import javax.activation.filedataSource; impor javax.mAmail. javax.mail.multipart; impor javax.mail.Session; impor javax.mail.transport; impor javax.mail.internet.addressException; impor javax.mail.internet.internetaddress; impor javax.mail.Internet.MimeBodyPart; impor javax.mail.Internet.MimeBodyPart; javax.mail.internet.mimemultipart; kelas publik sendmail {private static final string mail_address_regex = "^[// w //.=-ubungi +/// w //.-ubungi//. media// w] {2.3} $"; Private String MailServer; pengirim string pribadi; penerima string pribadi []; public sendmail () {} public void setMailBasicInfo (string mailServer, string pengirim, penerima string) {this.mailserver = mailserver; this.sender = pengirim; this.receiver = receiver.split (","); } public void setMailBasicInfo (String MailServer, String Sender, String [] pengguna) {this.mailServer = mailServer; this.sender = pengirim; this.receiver = pengguna; } public void setMailBasicInfo (String MailServer, String Sender, Daftar <string> pengguna) {this.mailserver = mailServer; this.sender = pengirim; this.receiver = string baru [users.size ()]; Users.toArray (this.receiver); } public boolean kirim (string subjek, konten string, daftar <string> fileNames) {subjek = subjek == null? "": subjek; konten = konten == null? "": konten; Properti props = properti baru (); props.put ("mail.smtp.host", mailserver); Sesi sesi = session.getInstance (alat peraga, null); coba {InternetAddress [] receiver = getReceiverList (); if (receiver.length == 0) {System.out.println ("Receiver is null"); mengembalikan false; } Mimemessage msg = mimemessage baru (sesi); msg.setFrom (InternetAddress baru (pengirim)); msg.setrecipients (message.recipienttype.to, penerima); msg.setsubject (subjek); msg.setsentDate (tanggal baru ()); Wadah multipart = mimemultipart baru (); Mimebodypart textbodypart = mimebodypart baru (); TextBodyPart.SetContent (Content.ToString (), "Teks/html; charset = gbk"); container.addbodypart (textbodypart); doattachfile (wadah, nama file); msg.setContent (wadah); System.out.println ("Mulai kirim surat"); Transport.Send (MSG); System.out.println ("Kirim Surat Sukses"); } catch (MessagingException e) {System.out.println ("Kirim email gagal"); System.out.println (e); mengembalikan false; } catch (Exception e) {return false; } return true; } public boolean kirim (subjek string, konten string) {return send (subjek, konten, null); } public boolean kirim (subjek string) {return kirim (subjek, null); } private void doattachfile (wadah multipart, daftar <string> fileNames) melempar MessagingException {if (fileNames == null || filenames.size () == 0) return; untuk (string fileName: fileNames) {file f = file baru (nama file); if (! f.isfile ()) lanjutkan; System.out.println ("File terlampir adalah:"+nama file); Mimebodypart filebodypart = mimebodypart baru (); FileDataSource fds = new FileDataSource (f); // 要发送的附件地址 FileBodyPart.setDataHandler (DataHandler baru (fds)); filebodypart.setFileName (fds.getName ()); // 设置附件的名称 container.addbodypart (FileBodyPart); }} private internetAddress [] getReceiverList () melempar addressException {arrayList <EnTENETADDRESS> TOLIST = NEW ARRAYLIST <EnTENETNADDRESS> (); untuk (int i = 0; i <receiver.length; ++ i) {if (receiver [i] .matches (mail_address_regex)) {tolist.add (internetAddress baru (penerima [i])); }} return (internetAddress []) tolist.toArray (internetAddress baru [tolist.size ()]); }}使用举例
Host string = "168.xx.xx.xx"; // 邮件服务器的地址 Subjek String = "发送邮件的主题"; String Sender = "[email protected]"; Daftar <String> receivers = new ArrayList <String> (); receemers.add ("[email protected]"); receems.add ("user2@263); content string =" 邮件主题 "; kirimmail sendmail = kirimeMail (ubarmail); content string." penerima); sendmail.send (subjek, konten, null); // 没有附件
正文也可以是 html 内容 , 如
String content = "<html> 详细信息 : <a href = 'xxxx'> 请点击查看! </a> </html>";
我们再来看一个封装好的类
paket com.message.base.email; impor com.message.base.spring.applicationHelper; import com.message.base.utils.stringutils; import com.message.base.utils.validateutils; impor org.slf4j.logger; impor org.slf4j.loggerFactory; impor javax.mail.*; impor javax.mail.internet.internetaddress; impor javax.mail.internet.mimemessage; impor java.util.collections; impor java.util.date; impor java.util.list; impor java.util.properties; /*** 发送邮件服务器. * * @Author Sunhao ([email protected]) * @Version V1.0, 13-3-25 上午 6:19 */Kelas Publik Emailserver {private static final Logger Logger = loggerFactory.getLogger (emailServer.class); // spring 中配置/** 邮箱服务器配置 **/daftar pribadi <mailconfig> config; / ** 是否开启 debug 调试模式 **/ private boolean isDebug = false; / ** 是否启用身份验证 **/ boolean private isauth = true; / ** 验证类型 **/ Private String authType = "auth"; / ** * 私有化默认构造器, 使外部不可实例化 */ Private EmailServer () {}/ ** * 单例, 保证上下文中只有一个 EmailServer * * @return emailServer */ public static emailServer getInstance () {return applicationHelper.getInstance (). Getbean (emailServer.class); } / ** * 发送普通邮件 (单个接收人) * * @param nama pengguna 发件人用户名 * @param kata sandi 发件人密码 * @param title 邮件标题 * @param konten 邮件正文 * @param receiver 单个接收人 * @return * / public boolean sendtextmail (string username, string password, string title, string content, string receiver) {return this.sewe Collections.singletonlist (penerima)); } /** * 发送普通邮件(多个接收人) * * @param username 发件人用户名 * @param password 发件人密码 * @param title 邮件标题 * @param content 邮件正文 * @param receivers 多个接收人 * @return */ public boolean sendTextMail(String username, String password, String title, String content, List<String> receivers){ Authentication auth = null; if (this.isAuth ()) {// 如果需要身份认证 , 则创建一个密码验证器 auth = otentikasi baru (nama pengguna, kata sandi); } Properti props = properti baru (); props.setProperty ("mail.smtp.auth", this.isAuth ()? "Benar": "false"); props.setProperty ("mail.transport.protocol", "auth"); Email config config = this.geteMailConfig (username); props.setProperty ("mail.smtp.host", config.getsmtp ()); props.setProperty ("mail.smtp.port", config.getport () + ""); // 根据邮件会话属性和密码验证器构造一个发送邮件的 sesi sesi sesi = session.getDefaultInstance (props, auth); session.setDebug (this.isdebug); Pesan pesan = this.maketextmail (sesi, judul, konten, nama pengguna, penerima, false); coba {transport.send (pesan); Kembali Benar; } catch (MessagingException e) {logger.error (e.getMessage (), e); mengembalikan false; } } /** * 发送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, konten, collections.singletonlist (penerima)); } /** * 发送HTML邮件(多个接收人) * * @param username 发件人用户名 * @param password 发件人密码 * @param title 邮件标题 * @param content 邮件正文 * @param receivers 多个接收人 * @return */ public boolean sendHtmlMail(String username, String password, String title, String content, List<String> receivers){ Authentication auth = null; if (this.isAuth ()) {// 如果需要身份认证 , 则创建一个密码验证器 auth = otentikasi baru (nama pengguna, kata sandi); } Properti props = properti baru (); props.setProperty ("mail.smtp.auth", this.isAuth ()? "Benar": "false"); props.setProperty ("mail.transport.protocol", "auth"); Email config config = this.geteMailConfig (username); props.setProperty ("mail.smtp.host", config.getsmtp ()); props.setProperty ("mail.smtp.port", config.getport () + ""); // 根据邮件会话属性和密码验证器构造一个发送邮件的 sesi sesi sesi = session.getDefaultInstance (props, auth); session.setDebug (this.isdebug); Pesan pesan = this.maketextmail (sesi, judul, konten, nama pengguna, penerima, true); coba {transport.send (pesan); Kembali Benar; } catch (MessagingException e) {logger.error (e.getMessage (), e); mengembalikan false; }} / ** * 获取邮件服务器配置 * * @param Email 邮箱地址 * @return * / private emailConfig geteMailConfig (email string) {string mailservicedomainname = this.getMailServicedomainname (email); untuk (email config config: this.config) {if (config.getName (). equals (mailservicedomainname)) {return config; }} return null; } / ** * 创建邮件 Pesan * * @param sesi 根据配置获得的 sesi * @param title 邮件主题 * @param konten 邮件的内容 * @param dari 发件者 * @param receiver 收件者 * @param isHtmlmail 是否是 html 邮件 * / private message MaketextMail (sesi sesi, string title, string konten, string, daftar <string> penerima <string> private MACETEXTMAIL (Sesi) Mimemessage (sesi); coba { / ** 标题 ** / logger.info ("Judul surat ini adalah {}", judul); pesan.setsubject (judul); / ** 内容 **/ logger.info ("Konten surat ini adalah {}", konten); if (isHtmlmail) {// 是 html 邮件 pesan.setContent (konten, "teks/html; charset = utf-8"); } else {// 普通邮件 pesan.setText (konten); } / ** 发件者地址 ** / logger.info ("Pengirim surat ini adalah {}", dari); Alamat dari ADDRESS = InternetAddress baru (dari); message.setFrom (fromAddress); / ** 接收者地址 **/ alamat [] tos = internetAddress baru [receivers.size ()]; untuk (int i = 0; i <receivers.size (); i ++) {string receiver = receivers.get (i); if (validateutils.isemail (receiver)) {tos [i] = new internetAddress (penerima); }} / ** 发件时间 ** / message.setsentDate (tanggal baru ()); message.setrecipients (message.recipienttype.to, tos); } catch (MessagingException e) {logger.error (e.getMessage (), e); e.printstacktrace (); } kembalikan pesan; } / ** * 获取邮箱域名 * * @param Email 邮箱 * @return * / Private String getMailServIdeMainName (email string) {if (stringutils.isempty (email)) {return ""; } else {int firstIndex = stringutils.indexof (email, "@"); int secondEndex = stringutils.LastIndexOf (email, "."); return stringutils.substring (email, firstIndex + 1, secondIndex); }} daftar publik <mailconfig> getConfig () {return config; } public void setConfig (daftar <mailconfig> 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 = authType; }}
调用方式如下
public boolean sendmail () melempar Exception {List <String> receiver = new ArrayList <String> (); penerima.add ("[email protected]"); receiver.add ("[email protected]"); EmailServer.getInstance (). SendHtmlmail ("[email protected]", "这里是密码", "测试发送 html 邮件", "<span style = 'color: red; font-size: 20pt'> 测试发送 html 邮件 </span> <a href = 'http:/// target = '_ blank'> 链接到百度 </a> ", penerima); kembalikan emailServer.getInstance (). SendTextMail ("[email protected]", "这里是密码", "测试发送文本邮件", "测试发送文本邮件测试发送文本邮件测试发送文本邮件", penerima);}PS: 正在考虑扩展, 如果把这几个类封在 JAR 包中, 如何进行邮件服务器配置的扩展.
如有不好之处, 欢迎拍砖.