下面代码是利用 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;import javax.activation.FileDataSource;import javax.mail.Message;import javax.mail.MessagingException;import javax.mail.Session; importar javax.mail.transport; importar javax.mail.internet.addressException; importar javax.mail.internet.internetDdress; importer javax.mail.internet.mimeMenerTart; javax.mail.internet.mimemultipart; classe pública sendmail {private static final string Mail_address_regex = "^ String privado String MailServer; remetente privado de string; String privada [] receptor; public sendmail () {} public void setMailBasicInfo (String MailServer, String remetente, String Receiver) {this.mailServer = MailServer; this.sender = remetente; this.receiver = receiver.split (","); } public void setMailBasicInfo (String MailServer, String remetente, string [] usuários) {this.mailServer = MailServer; this.sender = remetente; this.receiver = usuários; } public void setMailBasicInfo (String MailServer, String remetente, List <String> Users) {this.mailServer = MailServer; this.sender = remetente; this.receiver = new String [users.size ()]; usuários.toArray (this.receiver); } public boolean send (sujeito da string, conteúdo da string, list <string> nomes de arquivo) {sujeito = sujeito == null? "": sujeito; content = content == null? "": Content; Propriedades Props = new Properties (); ProPs.put ("Mail.smtp.host", MailServer); Sessão session = session.getInstance (adereços, nulo); tente {internetAddress [] receptor = getReceiverList (); if (receiver.Length == 0) {System.out.println ("Receptor é nulo"); retornar falso; } Mimemessage msg = new Mimemessage (sessão); msg.setFrom (novo InternetAddress (remetente)); msg.setRecipients (message.recipientType.to, receptor); msg.SetSubject (sujeito); msg.SetSentDate (new Date ()); Contêiner multipart = new Mimemultipart (); MimeBodyPart textBodyPart = new MimeBodyPart (); textBodyPart.SetContent (Content.toString (), "Text/html; charset = gbk"); container.addbodyPart (textBodyPart); doattachfile (contêiner, nomes de arquivos); msg.setContent (contêiner); System.out.println ("BEGN ENVIR CAIL"); Transport.send (msg); System.out.println ("Enviar sucesso em correio"); } catch (MessagingException e) {System.out.println ("Enviar e -mail fracassar"); System.out.println (e); retornar falso; } catch (Exceção e) {return false; } retornar true; } public boolean send (sujeito da string, conteúdo da string) {return send (sujeito, conteúdo, nulo); } public boolean send (sujeito da string) {return send (sujeito, nulo); } private void doattachfile (contêiner multipart, list <string> nomes de arquivo) lança MessagingException {if (filenames == null || filenames.size () == 0) return; for (string filename: filenames) {arquivo f = novo arquivo (nome do arquivo); if (! f.isfile ()) continuar; System.out.println ("O arquivo de anexo é:"+nome do arquivo); MimebodyPart fileBodyPart = new MimeBodyPart (); Filedatasource fds = new FileDataSource (f); // 要发送的附件地址 FileBodyPart.setDatahandler (New Datahandler (FDS)); fileBodyPart.setFilename (fds.getName ()); // 设置附件的名称 container.addbodypart (FileBodyPart); }} private InternetAddress [] getReCeiverList () lança o endereço {ArrayList <ToneRAddress> tolist = new ArrayList <LeetAddress> (); for (int i = 0; i <recemer.length; ++ i) {if (receptor [i] .matches (Mail_address_regex)) {tolist.add (new InternetDress (receptor [i])); }} return (InternetAddress []) TOLIST.TOARRAY (NOVA InternetAddress [tolist.size ()]); }}使用举例
String host = "168.xx.xx.xx"; // 邮件服务器的地址 string sujeito = "发送邮件的主题"; string sester = "[email protected]"; list <string> receptores = new ArrayList <String> (); receptores.add ("[email protected]"); receptores.add ("[email protected]"); string = "邮件主题"; sendmail sendmail receptores); sendmail.send (sujeito, conteúdo, nulo); // 没有附件
正文也可以是 html 内容 , 如
String Content = "<Html> 详细信息: <a href = 'xxxx'> 请点击查看! </a> </html>";
我们再来看一个封装好的类
pacote com.message.base.mail; importar com.message.base.spring.applicationHelper; importar com.message.base.utils.stringutils; importar com.message.base.utils.validutils; importar org.slf4j.logger; importar org.slf4j.LoggerFactory; importar javax.mail.*; importar javax.mail.internet.internetDdress; importar javax.mail.internet.mimemessage; importar java.util.Collections; importar java.util.date; import java.util.list; import java.util.properties; /*** 发送邮件服务器. * * @Author Sunhao ([email protected]) * @version v1.0, 13-3-25 上午 6:19 */classe pública emailServer {private Static Final Logger = LoggerFactory.getLogger (emailServer.class); // mola 中配置/** 邮箱服务器配置 **/Lista privada <MailConfig> Config; / ** 是否开启 Debug 调试模式 **/ Private boolean isdebug = false; / ** 是否启用身份验证 **/ private boolean isauth = true; / ** 验证类型 **/ private String autyttype = "auth"; / ** * 私有化默认构造器, 使外部不可实例化 */ private emailServer () {}/ ** * 单例, 保证上下文中只有一个 emailServer * * @return emailServer */ public static emailServer getInstance () {return ApplicationHelper.getInstance (). GetBean (emailServer.class); } / ** * 发送普通邮件 (单个接收人) * * @param nome de usuário 发件人用户名 * @param senha 发件人密码 * @param título 邮件标题 * @param Content 邮件正文 * @param receptor 单个接收人 * @return * / public boolean sendTextMail (string userName, senha, string title, string content, record, receptor) {return th This.SendText (string userName, senha, string de string, used, Return {Return This.SendText (string (string, senha, string de string, Return {Return This.SendText (string (string senha, string de string, Return) Coleções.singletonList (receptor)); } / ** * 发送普通邮件 (多个接收人) * * @param nome de usuário 发件人用户名 * @param senha 发件人密码 * @param título 邮件标题 * @param Content 邮件正文 * @param receptores 多个接收人 * @return * / public boolean sendTextMail (string userName, string senha, string title content, list <tring> receptores) {authentication n. if (this.isauth ()) {// 如果需要身份认证 , 则创建一个密码验证器 auth = nova autenticação (nome de usuário, senha); } Propriedades Props = new Properties (); props.setProperty ("Mail.smtp.auth", this.isauth ()? "true": "false"); props.setProperty ("Mail.Transport.protocol", "Auth"); Emailconfig config = this.getEmailconfig (nome de usuário); props.setProperty ("Mail.smtp.host", config.getsmtp ()); props.setProperty ("Mail.smtp.port", config.getport () + ""); // 根据邮件会话属性和密码验证器构造一个发送邮件的 sessão sessão sessão = session.getDefaultInstance (adereços, auth); session.setDebug (this.isdebug); Mensagem mensagem = this.makeTextMail (sessão, título, conteúdo, nome de usuário, receptores, false); tente {transport.send (mensagem); retornar true; } catch (MessagingException e) {Logger.error (e.getMessage (), e); retornar falso; }} / ** * 发送 html 邮件 (单个接收人) * * @param nome de usuário 发件人用户名 * @param senha 发件人密码 * @param título 邮件标题 * @param Content 邮件正文 * @param Receiver 单个接收人 * @return * / public boolean sendHtmlmail (string userName, string senha, string, strac conteúdo, coleções.singletonList (receptor)); } / ** * 发送 html 邮件 (多个接收人) * * @param nome de usuário 发件人用户名 * @param senha 发件人密码 * @param título 邮件标题 * @param content 邮件正文 * @param receptores 多个接收人 * @return * / public boolean sendHtmlmail (string userName, string, senha, string, string, list <> receptores <> if (this.isauth ()) {// 如果需要身份认证 , 则创建一个密码验证器 auth = nova autenticação (nome de usuário, senha); } Propriedades Props = new Properties (); props.setProperty ("Mail.smtp.auth", this.isauth ()? "true": "false"); props.setProperty ("Mail.Transport.protocol", "Auth"); Emailconfig config = this.getEmailconfig (nome de usuário); props.setProperty ("Mail.smtp.host", config.getsmtp ()); props.setProperty ("Mail.smtp.port", config.getport () + ""); // 根据邮件会话属性和密码验证器构造一个发送邮件的 sessão sessão sessão = session.getDefaultInstance (adereços, auth); session.setDebug (this.isdebug); Mensagem mensagem = this.maketextmail (sessão, título, conteúdo, nome de usuário, receptores, true); tente {transport.send (mensagem); retornar true; } catch (MessagingException e) {Logger.error (e.getMessage (), e); retornar falso; }} / ** * 获取邮件服务器配置 * * @param email 邮箱地址 * @return * / private emailconfig getemailConfig (string email) {string MailServicedOmAinName = this.getMailServicedOMainName (email); para (emailconfig config: this.config) {if (config.getName (). Equals (MailServicedMainName)) {return config; }} retornar nulo; } / ** * 创建邮件 mensagem * * @param sessão 根据配置获得的 sessão * @param título 邮件主题 * @param Content 邮件的内容 * @param de 发件者 * @param receptores 收件者 * @param ishtmlmail 是否是 html 邮件 * / private mensagem maketextMail (sessão de sessão, string, string de, list <string> recebidas Mimemessage (sessão); tente { / ** 标题 ** / logger.info ("O título deste e -mail é {}", title); message.SetSubject (título); / ** 内容 **/ logger.info ("O conteúdo deste e -mail é {}", conteúdo); if (ishtmlmail) {// 是 html 邮件 message.setContent (conteúdo, "text/html; charset = utf-8"); } else {// 普通邮件 message.settext (content); } / ** 发件者地址 ** / logger.info ("O remetente deste e -mail é {}", de); Endereço FromAddress = new InternetAddress (de); message.setFrom (FromAddress); / ** 接收者地址 **/ endereço [] TOS = new InternetAddress [receptores.size ()]; for (int i = 0; i <receptores.size (); i ++) {string receiver = receptores.get (i); if (validateUtils.isEmail (receptor)) {TOS [i] = new InternetDdress (receptor); }} / ** 发件时间 ** / message.SetSentDate (new Date ()); message.setRecipients (message.recipientType.to, TOS); } catch (MessagingException e) {Logger.error (e.getMessage (), e); E.PrintStackTrace (); } retornar mensagem; } / ** * 获取邮箱域名 * * @param email 邮箱 * @return * / private string getMailServicedMainName (string email) {if (stringutils.isEmpty (email)) {return ""; } else {int FirstIndex = stringUtils.indexOf (email, "@"); int secondIndex = stringUtils.lastIndexOf (email, "."); return stringutils.substring (email, primeirondex + 1, SecondIndex); }} list public <ailemonConfig> getConfig () {return config; } public void SetConfig (List <ailarConfig> config) {this.config = config; } public boolean isdebug () {return isdebug; } public void setDebug (debug booleano) {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 () lança exceção {list <string> receptores = new ArrayList <String> (); receptores.add ("[email protected]"); receptores.add ("[email protected]"); E-mailserver.getInstance (). Sendhtmlmail ("[email protected]", "这里是密码", "测试发送 html 邮件", "<span style = 'cor: vermelho; font-size: 20pt'> 测试发送 html 邮件 </span> <a href = 'http: // Target = '_ Blank'> 链接到百度 </a> ", receptores); Retorne emailServer.getInstance (). SendTextMail ("[email protected]", "这里是密码", "测试发送文本邮件", "测试发送文本邮件测试发送文本邮件测试发送文本邮件", receptores);}PS: 正在考虑扩展, 如果把这几个类封在 jar 包中, 如何进行邮件服务器配置的扩展.
如有不好之处, 欢迎拍砖.