下面代码是利用 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.filedataTataSource; import javax.mail.Mail.Mail.Messessage.Message.MeSage.MeSage.MeSage. javax.mail.multipart; import javax.mail.session; import javax.mail.transport; import javax.mail.internet.addressException; import javax.mail.internet.internetaddress; import javax.mail.internet.mimeBodyPart; javax.mail.internet.mimemultipart; public class sendmail {private static final String mail_address_regex = "^[// w //.=-font>+@igh/// w //.-font>//.che// w] {2,3} $"; String de cadena privada remitente de cadena privada; receptor de cadena privada []; public sendmail () {} public void setMailBasicInfo (String MailServer, String Sender, String RECISN) {this.mailServer = mailserver; this.sender = remitente; this.Receiver = receper.split (","); } public void setMailBasicInfo (String MailServer, String Sender, String [] usuarios) {this.mailServer = mailserver; this.sender = remitente; this.Receiver = Usuarios; } public void setMailBasicInfo (String MailServer, String Sender, List <String> Users) {this.mailServer = mailserver; this.sender = remitente; this.Receiver = new String [users.size ()]; ussers.toarray (this.Receiver); } public boolean send (String Sujeto, String Content, List <String> FileNames) {Sujem = Sujem == NULL? "": Sujem; content = content == null? "": content; Propiedades Props = New Properties (); propssput ("mail.smtp.host", mailserver); Sesión session = session.getInstance (Props, NULL); intente {Internetaddress [] receper = getReceiverList (); if (receptor.length == 0) {System.out.println ("El receptor es nulo"); devolver falso; } Mimemessage msg = new Mimemessage (sesión); msg.setFrom (nuevo Internetaddress (remitente)); msg.setRecipients (Message.RecipientType.to, receptor); msg.setsubject (sujeto); msg.setsentDate (nueva fecha ()); Contenedor multipart = new Mimemultipart (); MimeBodyPart TextBodyPart = new MimeBodyPart (); TextBodyPart.SetContent (content.ToString (), "text/html; charset = gbk"); Container.AddBodyPart (TextBodyPart); Doattachfile (contenedor, nombres de archivo); msg.setContent (contenedor); System.out.println ("Comenzar envío de correo"); Transport.send (MSG); System.out.println ("Enviar éxito por correo"); } Catch (MessionGingException e) {System.out.println ("Enviar fallas de correo"); System.out.println (e); devolver falso; } capt (excepción e) {return false; } return verdadero; } public boolean send (string stem, string content) {return send (sujeto, contenido, nulo); } public boolean send (string asunto) {return send (asunto, nulo); } private void doattachfile (contenedor multipart, list <string> fileNames) lanza MessagingException {if (FileNames == NULL || FileNames.size () == 0) Return; for (String FileName: FileNames) {Archivo f = nuevo archivo (nombre de archivo); if (! f.isfile ()) continuar; System.out.println ("El archivo adjunto es:"+nombre de archivo); MimeBodyPart fileBodyPart = new MimeBodyPart (); FileDataSource fds = new FileDataSource (f); // 要发送的附件地址 FileBodyPart.SetDatahandler (nuevo Datahandler (FDS)); FileBodyPart.SetFileName (fds.getName ()); // 设置附件的名称 Container.addBodyPart (FileBodyPart); }} private internetaddress [] getReceiverList () lanza DirectEexception {ArrayList <SetnetDDress> tolist = new ArrayList <Scetetnaddress> (); for (int i = 0; i <recepor.length; ++ i) {if (receptor [i] .matches (mail_address_regex)) {tolist.add (nuevo Internetaddress (receptor [i])); }} return (Internetaddress []) tolist.toarray (nuevo Internetaddress [tolist.size ()]); }}使用举例
String host = "168.xx.xx.xx"; //邮件服务器的地址String subject = "发送邮件的主题";String sender = "[email protected]";List<String> receivers = new ArrayList<String>();receivers.add("[email protected]");receivers.add("[email protected]");String content = "邮件主题";SendMail sendMail = new SendMail();sendMail.setMailBasicInfo(host, sender, receptores); sendmail.send (sujeto, contenido, nulo); // 没有附件
正文也可以是 html 内容 如 如
String content = "<html> 详细信息 : <a href = 'xxxx'> 请点击查看! </a> </html>";
我们再来看一个封装好的类
paquete com.message.base.email; import 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; import javax.mail.*; import javax.mail.internet.internetaddress; import javax.mail.internet.mimemessage; import java.util.collections; import java.util.date; import java.util.list; import java.util.properties; /*** 发送邮件服务器. * * @author Sunhao ([email protected]) * @version v1.0, 13-3-25 上午 6:19 */public classserServer {private static final logger = loggerFactory.getLogger (correo electrónicoServer.class); // Spring 中配置/** 邮箱服务器配置 **/Lista privada <icloicConfig> config; / ** 是否开启 Debug 调试模式 **/ Private Boolean isDebug = false; / ** 是否启用身份验证 **/ Private Boolean Isauth = True; / ** 验证类型 **/ private String AuthType = "Auth"; / ** * 私有化默认构造器, 使外部不可实例化 */ private CageServer () {}/ ** * 单例, 保证上下文中只有一个 ° de correo electrónico * * @return correaje emailserver */ public staticServer getInstance () {return Application.getInstance (). } / ** * 发送普通邮件 (单个接收人) * * * @param nombre de usuario 发件人用户名 * @param contraseña 发件人密码 * @param title 邮件标题 * @param content 邮件正文 * @param receptor 单个接收人 * @return * / public boolean sendextmail (string useName, string contraseña, título de cadena, contenido de cadena, cadena de cadena) {regreso. Colección.singletonList (receptor)); } / ** * 发送普通邮件 (多个接收人) * * @param UserName 发件人用户名 * @param contraseña 发件人密码 * @param title 邮件标题 * @param content 邮件正文 * @param receptores 多个接收人 * @return * / public boolean sendTextmail (cadena de username, contraseña de cadena, titular de cadena, contenido de cadena, lista <cadena> receptores) {autentication auth = null; if (this.isauth ()) {// 如果需要身份认证 , 则创建一个密码验证器 auth = new Authentication (nombre de usuario, contraseña); } Propiedades props = new Properties (); propsssetProperty ("mail.smtp.auth", this.isauth ()? "Verdadero": "falso"); propsssetProperty ("mail.transport.protocol", "auth"); Emailconfig config = this.getEmailConfig (nombre de usuario); propsssetProperty ("mail.smtp.host", config.getSmtp ()); propsssetProperty ("mail.smtp.port", config.getport () + ""); // 根据邮件会话属性和密码验证器构造一个发送邮件的 Sesión Sesión Sesión = Session.getDefaultInstance (Props, Auth); session.setDebug (this.isdebug); Mensaje Mensaje = this.MaketeTextmail (sesión, título, contenido, nombre de usuario, receptores, falso); intente {transport.send (mensaje); devolver verdadero; } catch (MessionGingException e) {logger.error (e.getMessage (), e); devolver falso; }} / ** * 发送 html 邮件 (单个接收人) * * @param username 发件人用户名 * @param contraseña 发件人密码 * @param title 邮件标题 * @param content 邮件正文 * @param receptor 单个接收人 * @return * / public boolean sendhtmlMail (cadena de userneNerNet contraseña, cadena Título, Título de cadena, contenido de cadena) contenido, colección.singletonList (receptor)); } / ** * 发送 html 邮件 (多个接收人) * * @param username 发件人用户名 * @param contraseña 发件人密码 * @param title 邮件标题 * @param Content 邮件正文 * @param receptores 多个接收人 * @return * / public boolean sendhtmlmail (string username contraseña, cadena Título de cadena, contenido, lista <string> recibe) {Authent Authent Authent; if (this.isauth ()) {// 如果需要身份认证 , 则创建一个密码验证器 auth = new Authentication (nombre de usuario, contraseña); } Propiedades props = new Properties (); propsssetProperty ("mail.smtp.auth", this.isauth ()? "Verdadero": "falso"); propsssetProperty ("mail.transport.protocol", "auth"); Emailconfig config = this.getEmailConfig (nombre de usuario); propsssetProperty ("mail.smtp.host", config.getSmtp ()); propsssetProperty ("mail.smtp.port", config.getport () + ""); // 根据邮件会话属性和密码验证器构造一个发送邮件的 Sesión Sesión Sesión = Session.getDefaultInstance (Props, Auth); session.setDebug (this.isdebug); Mensaje Mensaje = this.MaketeTextmail (sesión, título, contenido, nombre de usuario, receptores, verdadero); intente {transport.send (mensaje); devolver verdadero; } catch (MessionGingException e) {logger.error (e.getMessage (), e); devolver falso; }} / ** * 获取邮件服务器配置 * * @param Correo electrónico 邮箱地址 * @return * / privado Correo electrónico GetEmailCig (Correo electrónico de cadena) {String MailServateMainName = this.getMailServiceMainName (correo electrónico); para (CORRAGEMACONFIG CONFIG: this.config) {if (config.getName (). Equals (MailServateMainName)) {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 (sesión); intente { / ** 标题 ** / logger.info ("El título de este correo es {}", título); Message.setsubject (título); / ** 内容 **/ logger.info ("El contenido de este correo es {}", contenido); if (ishtmlmail) {// 是 html 邮件 message.setContent (content, "text/html; charset = utf-8"); } else {// 普通邮件 Message.settext (contenido); } / ** 发件者地址 ** / logger.info ("El remitente de este correo es {}", desde); Dirección fromAddress = new InternetAddress (de); Message.setFrom (fromAddress); / ** 接收者地址 **/ dirección [] tos = new InternetAddress [receptores.size ()]; for (int i = 0; i <receptores.size (); i ++) {string receptor = receptores.get (i); if (validateUtils.isEmail (receptor)) {tos [i] = new InternetAddress (receptor); }} / ** 发件时间 ** / Message.setsentDate (nueva fecha ()); Message.setRecipients (Message.RecipientType.to, TOS); } catch (MessionGingException e) {logger.error (e.getMessage (), e); E.PrintStackTrace (); } Mensaje de retorno; } / ** * 获取邮箱域名 * * @param Correo electrónico 邮箱 * @return * / private String getMailServateMainName (Correo electrónico de cadena) {if (StringUtils.isEmpty (correo electrónico)) {return ""; } else {int FirstIndex = StringUtils.indexof (correo electrónico, "@"); int SecondIndex = StringUtils.lastIndexof (correo electrónico, "."); return stringUtils.substring (correo electrónico, FirstIndex + 1, SecondIdex); }} Lista pública <icloicConfig> getConfig () {return config; } public void setConfig (List <Roilconfig> config) {this.config = config; } public boolean isDebug () {return isDebug; } public void setDebug (depuración booleana) {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 () lanza excepción {list <string> receptores = new ArrayList <String> (); receptores.add ("[email protected]"); receptores.add ("[email protected]"); Correajeserver.getInstance (). Sendhtmlmail ("[email protected]", "这里是密码", "测试发送 html 邮件", "<span style = 'color: rojo; font-size: 20pt'> 测试发送 html 邮件 </span> <a href = 'http: //wwww.baidu.com' ' Target = '_ en blanco'> 链接到百度 </a> ", receptores); devuelve correos electrónicoserver.getInstance (). sendTextmail ("[email protected]", "这里是密码", "测试发送文本邮件", "测试发送文本邮件测试发送文本邮件测试发送文本邮件", receptores);}PD: 正在考虑扩展, 如果把这几个类封在 jar 包中, 如何进行邮件服务器配置的扩展.
如有不好之处, 欢迎拍砖.