使用java-java中的变量从文件发送html电子邮件

使用java-java中的变量从文件发送html电子邮件,java,html,Java,Html,我想发送一封带有html标记文本的电子邮件。 我希望我的代码从我的pc上的文件中获取消息,并且我希望能够使用项目中的变量。 所以我的留言是:你好[用户名] 而[username]是一个变量 package com.email; import java.util.Date; import java.util.Properties; import javax.activation.CommandMap; import javax.activation.DataHandler; import

我想发送一封带有html标记文本的电子邮件。 我希望我的代码从我的pc上的文件中获取消息,并且我希望能够使用项目中的变量。 所以我的留言是:你好[用户名] 而[username]是一个变量

package com.email;

import java.util.Date; 
import java.util.Properties; 
import javax.activation.CommandMap; 
import javax.activation.DataHandler; 
import javax.activation.DataSource; 
import javax.activation.FileDataSource; 
import javax.activation.MailcapCommandMap; 
import javax.mail.BodyPart; 
import javax.mail.Multipart; 
import javax.mail.PasswordAuthentication; 
import javax.mail.Session; 
import javax.mail.Transport; 
import javax.mail.internet.InternetAddress; 
import javax.mail.internet.MimeBodyPart; 
import javax.mail.internet.MimeMessage; 
import javax.mail.internet.MimeMultipart;


public class SendMail extends javax.mail.Authenticator { 

  private String _user; 
  private String _pass; 

  private String[] _to = new String[1]; 
  private String _from; 

  private String _port; 
  private String _sport; 

  private String _host; 

  private String _subject; 
  private String _body; 

  private boolean _auth; 

  private boolean _debuggable; 

  private Multipart _multipart; 


  public SendMail() {
    _host = "smtp.live.com"; // default smtp server
    _port = "587"; // default smtp port 
    _sport = "587"; // default socketfactory port

    _user = "user@hotmail.com"; // username 
    _pass = "password"; // password 
    _from = "user@hotmail.com"; // email sent from 
    _subject = "Welcome to Ravenous!"; // email subject 
    _body = "<h2 style='font-style: normal;font-weight: 700;Margin-bottom: 0;Margin-top: 0;font-size: 24px;line-height: 32px;font-family: Open Sans,sans-serif;color: #44a8c7;text-align: center'>Welcome to Ravenous!</h2><p style='font-style: normal;font-weight: 400;Margin-bottom: 0;Margin-top: 16px;font-size: 15px;line-height: 24px;font-family: Open Sans,sans-serif;color: #60666d;text-align: center'>Hello, we hope that you enjoy your stay on Ravenous.</p>"; // email body 
    _to[0] = "";
    _debuggable = false; // debug mode on or off - default off 
    _auth = true; // smtp authentication - default on 

    _multipart = new MimeMultipart(); 

    // There is something wrong with MailCap, javamail can not find a handler for the multipart/mixed part, so this bit needs to be added. 
    MailcapCommandMap mc = (MailcapCommandMap) CommandMap.getDefaultCommandMap(); 
    mc.addMailcap("text/html;; x-java-content-handler=com.sun.mail.handlers.text_html"); 
    mc.addMailcap("text/xml;; x-java-content-handler=com.sun.mail.handlers.text_xml"); 
    mc.addMailcap("text/plain;; x-java-content-handler=com.sun.mail.handlers.text_plain"); 
    mc.addMailcap("multipart/*;; x-java-content-handler=com.sun.mail.handlers.multipart_mixed"); 
    mc.addMailcap("message/rfc822;; x-java-content-handler=com.sun.mail.handlers.message_rfc822"); 
    CommandMap.setDefaultCommandMap(mc); 
  } 

  public SendMail(String to) { 
    this(); 
    _user = "user@hotmail.com";
    _pass = "password";

    _to[0] = to; 
  } 

  public boolean send() throws Exception { 
    Properties props = _setProperties(); 

    if(!_user.equals("") && !_pass.equals("") && _to.length > 0 && !_from.equals("") && !_subject.equals("") && !_body.equals("")) { 
      Session session = Session.getInstance(props, this); 

      MimeMessage msg = new MimeMessage(session); 

      msg.setFrom(new InternetAddress(_from)); 

      InternetAddress[] addressTo = new InternetAddress[_to.length]; 
      for (int i = 0; i < _to.length; i++) { 
        addressTo[i] = new InternetAddress(_to[i]); 
      } 
        msg.setRecipients(MimeMessage.RecipientType.TO, addressTo); 

      msg.setSubject(_subject); 
      msg.setSentDate(new Date()); 

      // setup message body 
      BodyPart messageBodyPart = new MimeBodyPart(); 
      messageBodyPart.setContent(_body, "text/html; charset=utf-8"); 
      _multipart.addBodyPart(messageBodyPart); 

      // Put parts in message 
      msg.setContent(_multipart); 

      // send email 
      Transport.send(msg); 

      return true; 
    } else { 
      return false; 
    } 
  } 

  public void addAttachment(String filename) throws Exception { 
    BodyPart messageBodyPart = new MimeBodyPart(); 
    DataSource source = new FileDataSource(filename); 
    messageBodyPart.setDataHandler(new DataHandler(source)); 
    messageBodyPart.setFileName(filename); 

    _multipart.addBodyPart(messageBodyPart); 
  } 

  @Override 
  public PasswordAuthentication getPasswordAuthentication() { 
    return new PasswordAuthentication(_user, _pass); 
  } 

  private Properties _setProperties() { 
    Properties props = new Properties(); 

    props.put("mail.smtp.host", _host); 

    if(_debuggable) { 
      props.put("mail.debug", "true"); 
    } 

    if(_auth) { 
      props.put("mail.smtp.auth", "true"); 
    } 

    props.put("mail.smtp.port", _port); 
    props.put("mail.smtp.socketFactory.port", _sport); 
   // props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); 
    props.put("mail.smtp.socketFactory.fallback", "false"); 
    props.put("mail.smtp.starttls.enable", "true");

    return props; 
  } 

  // the getters and setters 
  public String getBody() { 
    return _body; 
  } 

  public void setBody(String _body) { 
    this._body = _body; 
  } 

  public String[] getTo() { 
    return _to; 
  } 

  public void setTo(String[] _to) { 
    this._to = _to; 
  } 

  public String getFrom() { 
    return _from; 
  } 

  public void setFrom(String _from) { 
    this._from = _from; 
  }
  public String getSubject() { 
    return _subject; 
  } 

  public void setSubject(String _subject) { 
    this._subject = _subject; 
  }   
  // more of the getters and setters ….. 
} 
package.com.email;
导入java.util.Date;
导入java.util.Properties;
导入javax.activation.CommandMap;
导入javax.activation.DataHandler;
导入javax.activation.DataSource;
导入javax.activation.FileDataSource;
导入javax.activation.MailcapCommandMap;
导入javax.mail.BodyPart;
导入javax.mail.Multipart;
导入javax.mail.PasswordAuthentication;
导入javax.mail.Session;
导入javax.mail.Transport;
导入javax.mail.internet.InternetAddress;
导入javax.mail.internet.MimeBodyPart;
导入javax.mail.internet.mimessage;
导入javax.mail.internet.MimeMultipart;
公共类SendMail扩展了javax.mail.Authenticator{
私有字符串用户;
私人字符串传递;
私有字符串[]_to=新字符串[1];
私有字符串_来自;
专用字符串\u端口;
私人弦乐运动;
私有字符串\u主机;
私有字符串(subject);;
私有字符串(body),;
私有布尔认证;
私有布尔可调试;
私有多部分_多部分;
公共发送邮件(){
_host=“smtp.live.com”;//默认smtp服务器
_port=“587”;//默认smtp端口
_sport=“587”;//默认socketfactory端口
_用户=”user@hotmail.com“;//用户名
_pass=“password”;//密码
_from=”user@hotmail.com“;//从发送的电子邮件
_subject=“欢迎来到贪婪!”//电子邮件主题
_body=“欢迎来到Ravenous!

您好,希望您在Ravenous过得愉快。

;//电子邮件正文 _至[0]=“”; _debuggable=false;//打开或关闭调试模式-默认关闭 _auth=true;//smtp身份验证-默认为打开 _multipart=新的MimeMultipart(); //MailCap有点问题,javamail无法找到多部分/混合部分的处理程序,因此需要添加此位。 MailcapCommandMap mc=(MailcapCommandMap)CommandMap.getDefaultCommandMap(); mc.addMailcap(“text/html;x-java-content-handler=com.sun.mail.handlers.text_html”); mc.addMailcap(“text/xml;x-java-content-handler=com.sun.mail.handlers.text_xml”); mc.addMailcap(“text/plain;;x-java-content-handler=com.sun.mail.handlers.text_plain”); mc.addMailcap(“multipart/*;x-java-content-handler=com.sun.mail.handlers.multipart_mixed”); mc.addMailcap(“message/rfc822;;x-java-content-handler=com.sun.mail.handlers.message_rfc822”); setDefaultCommandMap(mc); } 公用发送邮件(字符串到){ 这个(); _用户=”user@hotmail.com"; _pass=“password”; _to[0]=to; } public boolean send()引发异常{ Properties props=_setProperties(); 如果(!\u user.equals(“”&)&!\u pass.equals(“”&)&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& Session Session=Session.getInstance(props,this); MimeMessage msg=新MimeMessage(会话); msg.setFrom(新的Internet地址(_-from)); InternetAddress[]addressTo=新的InternetAddress[_to.length]; 对于(int i=0;i<_to.length;i++){ addressTo[i]=新的Internet地址(_to[i]); } msg.setRecipients(mimessage.RecipientType.TO,addressTo); msg.setSubject(_subject); msg.setSentDate(新日期()); //设置消息正文 BodyPart messageBodyPart=新的MimeBodyPart(); setContent(_body,“text/html;charset=utf-8”); _multipart.addBodyPart(messageBodyPart); //将部件放入消息中 msg.setContent(_多部分); //发送电子邮件 发送(msg); 返回true; }否则{ 返回false; } } public void addAttachment(字符串文件名)引发异常{ BodyPart messageBodyPart=新的MimeBodyPart(); DataSource source=新文件DataSource(文件名); setDataHandler(新的DataHandler(源)); messageBodyPart.setFileName(文件名); _multipart.addBodyPart(messageBodyPart); } @凌驾 公共密码身份验证getPasswordAuthentication(){ 返回新密码身份验证(_user,_pass); } 私有属性_setProperties(){ Properties props=新属性(); props.put(“mail.smtp.host”,\u host); 如果(_可调试){ props.put(“mail.debug”,“true”); } 如果(_auth){ props.put(“mail.smtp.auth”,“true”); } props.put(“mail.smtp.port”,_-port); props.put(“mail.smtp.socketFactory.port”,_sport); //put(“mail.smtp.socketFactory.class”、“javax.net.ssl.SSLSocketFactory”); props.put(“mail.smtp.socketFactory.fallback”、“false”); props.put(“mail.smtp.starttls.enable”、“true”); 返回道具; } //接球手和二传手 公共字符串getBody(){ 返回体; } 公共体(字符串_体){ 这个。_body=_body; } 公共字符串[]getTo(){ 返回; } public void setTo(字符串[]_to){ 这个._to=_to; } 公共字符串getFrom(){ 从中返回; } public void setFrom(字符串_from){ 这个.\u from=\u from; } 公共字符串getSubject(){ 返回主题; } public void setSubject(字符串_subject){ 这个._subject=_subject; } //更多的能手和二传手…。。 }
那么,我如何从html文件中获取html消息并将其与一些变量一起发送呢

这是我的模板文件的外观:

package com.email;

import java.io.*;
import java.util.*;

import com.world.entity.impl.player.Player;

import freemarker.template.*;

public class Template {

    public static String body;

    public static void  getTemplate() throws Exception {

        Configuration cfg = new Configuration(Configuration.VERSION_2_3_22);
        cfg.setDirectoryForTemplateLoading(new File("./data/templates/"));
        cfg.setDefaultEncoding("UTF-8");
        cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);

        Map<String, Object> root = new HashMap<String, Object>();
        root.put("userName", SendMail._username);
        Map<String, String> latest = new HashMap<String, String>();
        root.put("latestProduct", latest);
        latest.put("url", "products/greenmouse.html");
        latest.put("name", "green mouse");

        freemarker.template.Template temp = cfg.getTemplate("Welcome.ftl");

        Writer out = new OutputStreamWriter(System.out);
        body = out.toString();
        temp.process(root, out);

    }

}
package.com.email;
导入java.io.*;
导入java.util.*;
导入com.world.entity.impl.player.player;
导入freemarker.template.*;
公共类Te
Map root = new HashMap();
root.put("name", "John Doe");
...
Template temp = cfg.getTemplate("mymailtemplate.ftl");
...
<h1>Welcome ${name}!</h1>