Efecto general:
Fin de envío: correo electrónico de NetEase; Fin de recepción: correo electrónico QQ.
1. Front-end
2. Puede ver el correo electrónico enviado a través del código Java en el correo electrónico de NetEase "enviado"
3. También puede ver este efecto en el buzón QQ
Proceso de implementación:
1. front-end (diseño de bootstrap)
<form action="mailAction!sendMail" method="post" name="mailForm" id="mailFormId"> <ul> <li> <div> <span id="basic-addon1">Name:</span> <input type="text" placeholder="your name" name="mailForm.name" aria-describedby="basic-addon1"> </div> </li> <li> <div> <span id = "BASIC-ADDON2"> Tel: </span> <input type = "text" placeholder = "su teléfono" name = "mailform.phone" aria -describedby = "básico-addon1"> </div> </li> <li> <div> <div> spán aria-describedby="basic-addon1"> </div> </li> <li style="padding-top: 20px;"> <span>Message:</span> <br><br> <textarea rows="10" name="mailForm.content" placeholder="Please enter a message (do not exceed 500 characters)"></textarea> </li> <li> <center><button onClick = "$ ('#mailFormid'). Subt ();" type = "Button"> Enviar correo electrónico </boton> </center> </li> </ul> </form> 2. Primero prepare una plantilla XML (<XML-Body> contiene texto en formato HTML para el correo electrónico).
<? xml versión = "1.0" encoding = "utf-8"?> <!-Cambie los espacios a espacios de ancho completo para garantizar que HTML no filtre espacios-> <xml-body> <html> <lebe> </head> <body style = "margen: 0; 0; 0;"> <table cellpadding = "0" cellpacing = "0" 0 "0" style = "Padding: 10px 0 30px 0;"> <table align = "Center" CellPadding = "0" CellPacing = "0" Style = "Border: 1px Solid #CCCCCCC; Border-Collapse: colapso;"> <Tbody> <tr> <TD Align = "Center" Bgcolor = " #70BBD9" Style = "Padding: 40PX 0; #153643; <table cellPadding = "0" cellPacing = "0"> <tbody> <tr> <td style = "color: #153643; font-family: arial, sans-serif; font-size: 24px;"> <b> Sender: {0} <br/> teléfono: {1} <br/> correo electrónico:} <2} <br/> contenido: <br/> </td> </tr> <tr> <td style = "relleno: 20px 0 30px 0; color: #153643; font-family: arial, sans-serif; font-size: 16px; line-height: 20px;"> {3} </td> </tr> <tr> <td <td> <pla cellpadding = "0" Cellpacing = "0" 0 "0" 0 "0" 0 "0" 0 "0" 0 "0" 0 "0" 0 "0" <tbody> <tr> <td valign = "top"> <table cellPadding = "0" cellPacing = "0"> <tbody> <tr> <td <td> <img src = "cid: {5}" style = "display: block;"/> </td> </tbody> </table> </td> <td syle = "font-size: 0; </td> <td valign = "top"> <table cellPadding = "0" cellPacing = "0"> <tbody> <tr> <td> <img src = "cid: {6}" style = "visual </tr> </tbody> </table> </td> </tr> </tbody> </table> </td> </tr> </tbody> </table> </td> </tr> <tr> <td bgcolor = "#ee4c50" style = "remo: 30px 30px 30px 30px;"> <stable cellpadding <tbody> <tr> <td align = "right"> <table cellPadding = "0" cellPacing = "0"> <tbody> <tr> <td style = "font-family: arial, sans-serif; font-size: 12px; font-weight: bold;"> <img src = "cid: {7}" style = "exhibir: bloque;" style = "font-family: arial, sans-serif; font-size: 12px; font-weight: bold;"> <img src = "cid: {8}" style = "display: block;"/> </td> </html> </ xml-body> Habrá algunos identificadores en la plantilla, como {i}, tabla o ubicación reservada para cadenas, y luego formatear dichos mensajes a través de MessageFormat, y luego inserte la cadena formateada en la ubicación apropiada en el patrón.
// Obtenga la plantilla de String xml xml_path = servletactionContext.getServletContext (). GetRealPath ("/mailtemplate")+"/mymailtemplete.xml"; Cadena str = new Readerxml (). Read (xml_path); Objeto [] obj = nuevo objeto [] {mailForm.getName (), mailform.getphone (), mailform.getge_mail (), mailform.getContent (), "e_mail", "izquierda", "derecha", "tw", "fb"}; // MessageFormat puede formatear dichos mensajes y luego insertar la cadena formateada en la posición apropiada en la cadena de patrón tContent = MessageFormat.Format (str, obj); Finalmente, la {i} en la plantilla XML es reemplazada por OBJ [i] respectivamente.
3. Escribe una clase ReaderXML para plantillas XML
public class ReaderXMl {public String Read (String Path) {String str = null; str = lector (ruta); regresar str; } private String Reader (string ruta) {saxreader lector = new saxreader (); Cadena str = nulo; intente {documento d = lector.read (nuevo archivo (ruta)); Elemento e = d.getRootElement (); Elemento html = e.Element ("html"); str = html.asxml (); } catch (DocumentException e) {E.PrintStackTrace (); } return str; }} 4. Finalmente, nuestra clase de clase de controlador
La imagen contenida en el formato HTML es establecer el identificador único del archivo de recursos correspondiente utilizando el método setContentId () de la clase MimeBodyPart. Es decir, el protocolo MIME tiene el campo de encabezado de ID de contenido en el formato de estructura y organización del mensaje, que corresponde al identificador CID: {i} en la plantilla XML, como <img src = "cid: {8}"/> (nota: {i} se reemplazará con la cadena correspondiente a través de mensajes a través de mensajes.
Public Class MailAction extiende ActionSupport {private MailForm MailForm; public mailform getMailForm () {return mailform; } public void setmailform (mailform mailform) {this.mailform = mailform; } // Agregar una imagen integrada MimeBodyPart CreateImageMimeBodyPart (String ImageName) lanza MessionGingException, UnpportedEncodingEdingException {FileDataSource fds = new FileDataSource (ServLetActionContext.getServletContext (). GetLeLpath ("/Image" + "/" + ImageName + ".". MimeBodyPart mbp = new MimeBodyPart (); Datahandler dh = new Datahandler (fds); MBP.SetDatahandler (DH); // Establezca el identificador único del archivo de recursos correspondiente, es decir, el campo de encabezado de ID de contenido en el formato de estructura y organización del protocolo MIME para el mensaje; mbp.setheader ("content-id", nombre de imaginación); mbp.setFileName (mimeUtility.EncodeText (fds.getName ())); return mbp; } public String sendmail () {try {httpservletRequest request = servletactionContext.getRequest (); String pwd = "******************"; // Passions de correo electrónico del remitente String MailFrom = "*****************@163.com"; // cadena de correo electrónico de NetEase wangyifrom = mailFrom.substring (0, mailFrom.IndexOf ('@')); // netEase Correo electrónico Nombre de usuario Cadena tu = "163.com"; // Cadena de nombre de dominio de correo electrónico del sendor tto = "**************@qq.com"; // La dirección de correo electrónico que recibe la cadena de correo electrónico ttitle = "Alguien lo contacta --- desde el sitio web personal de Hu Junzheng"; // Según su ruta física, obtenga una cadena de plantilla XML xml_path = servletactionContext.getServletContext (). GetRealPath ("/mailtemplate")+"/mymailtemplete.xml"; Cadena str = new Readerxml (). Read (xml_path); Objeto [] obj = nuevo objeto [] {mailForm.getName (), mailform.getphone (), mailform.getge_mail (), mailform.getContent (), "e_mail", "izquierda", "derecha", "tw", "fb"}; // MessageFormat puede formatear dichos mensajes y luego insertar la cadena formateada en la posición apropiada en la cadena de patrón tContent = MessageFormat.Format (str, obj); Propiedades Props = New Properties (); props.put ("mail.smtp.host", "smtp."+tu); // buzón SMTP Servidor Dirección Puerto Props.put ("mail.smtp.auth", "true"); // de esta manera, puede aprobar la sesión de verificación s = session.getInstance (props); s.setDebug (verdadero); Mensaje Mimemessage = nuevo (s) Mimemessage; // Establecer el remitente/receta/enviar tiempo para el objeto de mensaje Internetaddress desde; from = new InternetAddress (mailFrom); // Enviar el mensaje QQ BAilBox del remitente.setFrom (desde); Internetaddress to = new InternetAddress (TTO); // Message de correo electrónico del destinatario. Message.setsubject (ttitle); Message.setsentDate (nueva fecha ()); //Set content for message object BodyPart mbp=new MimeBodyPart();//Create a new BodyPart object mbp.setContent(tcontent,"text/html;charset=gb2312");//Set content and format/encoding method for BodyPart object// Used to combine text and pictures, "related" type MimeMultipart object Multipart mm=new Mimemultipart ("relacionado"); // Cree un nuevo objeto Mimemultipart para almacenar objetos de parte del cuerpo (de hecho, múltiple) mm.AddBodyPart (MBP); // Agregar BodyPart al objeto Mimemultipart (se puede agregar una parte de la carrocería múltiple) // Agregar imagen Mm.AddBodyPart (CreateImageMimeBodybodyParT ("E_Mail");); mm.AddBodyPart (createImageMimeBodyPart ("izquierda")); mm.AddBodyPart (createImageMimeBodyPart ("correcto")); mm.AddBodyPart (createImageMimeBodyPart ("correcto")); mm.AddBodyPart (CreateImageMimeBodyPart ("TW")); mm.AddBodyPart (CreateImageMimeBodyPart ("FB")); Message.setContent (mm); // use mm como contenido del objeto de mensaje Message.saveChanges (); Transporte de transporte = s.getTransport ("SMTP"); transport.connect ("Smtp."+Tu, Wangyifrom, pwd); // El wangyifrom aquí es el transporte de cuenta Netease del remitente. transport.close (); ActionContext.getContext (). GetSession (). PUT ("Operaciones", "El correo electrónico se envió correctamente, ¡espere pacientemente la respuesta!"); } catch (Exception e) {System.out.println (e.ToString ()); ActionContext.getContext (). GetSession (). PUT ("Errores", e.ToString ()); devolver "errores"; } return "sendmail"; }}Lo anterior se trata de este artículo, espero que sea útil para el aprendizaje de todos.