如何用java实现发送html格式的邮件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用java实现发送html格式的邮件相关的知识,希望对你有一定的参考价值。
如题
首先Java发送邮件需要用到JavaMail,先到Oracle官网上下载好最新版本的JavaMail(刚才看了一下,最新是1.5.3),把下载的这个jar文件放到classpath里(如果是Web项目,就放到WEB-INF/lib目录下。
JavaMail主要支持发送纯文本的和html格式的邮件。
发送html格式的邮件的一个例程如下:
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeUtility;
import javax.mail.Session;
import javax.mail.MessagingException;
import javax.mail.Transport;
public class SendHtmlMail
public static void sendMessage(String smtpHost,
String from, String to,
String subject, String messageText)
throws MessagingException,java.io.UnsupportedEncodingException
// Step 1: Configure the mail session
System.out.println("Configuring mail session for: " + smtpHost);
java.util.Properties props = new java.util.Properties();
props.setProperty("mail.smtp.auth", "true");//指定是否需要SMTP验证
props.setProperty("mail.smtp.host", smtpHost);//指定SMTP服务器
props.put("mail.transport.protocol", "smtp");
Session mailSession = Session.getDefaultInstance(props);
mailSession.setDebug(true);//是否在控制台显示debug信息
// Step 2: Construct the message
System.out.println("Constructing message - from=" + from + " to=" + to);
InternetAddress fromAddress = new InternetAddress(from);
InternetAddress toAddress = new InternetAddress(to);
MimeMessage testMessage = new MimeMessage(mailSession);
testMessage.setFrom(fromAddress);
testMessage.addRecipient(javax.mail.Message.RecipientType.TO, toAddress);
testMessage.setSentDate(new java.util.Date());
testMessage.setSubject(MimeUtility.encodeText(subject,"gb2312","B"));
testMessage.setContent(messageText, "text/html;charset=gb2312");
System.out.println("Message constructed");
// Step 3: Now send the message
Transport transport = mailSession.getTransport("smtp");
transport.connect(smtpHost, "webmaster", "password");
transport.sendMessage(testMessage, testMessage.getAllRecipients());
transport.close();
System.out.println("Message sent!");
public static void main(String[] args)
String smtpHost = "localhost";
String from = "webmaster@mymail.com";
String to = "mfc42d@sohu.com";
String subject = "html邮件测试"; //subject javamail自动转码
StringBuffer theMessage = new StringBuffer();
theMessage.append("<h2><font color=red>这倒霉孩子</font></h2>");
theMessage.append("<hr>");
theMessage.append("<i>年年失望年年望</i>");
try
SendHtmlMail.sendMessage(smtpHost, from, to, subject, theMessage.toString());
catch (javax.mail.MessagingException exc)
exc.printStackTrace();
catch (java.io.UnsupportedEncodingException exc)
exc.printStackTrace();
JavaMail是封装了很多邮件操作的,所以使用起来不很困难,建议你到JavaMail官网看一下API或下载Java Doc API文档。
参考技术A 你可以试试seam的邮件发送,十分简单,而且支持html格式的邮件 参考技术B 刚刚写的一个发mail的程序:import java.util.ArrayList;
import java.util.Collection;
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.HtmlEmail;
public class MailTest
public static void sendHtmlEmail()
String subject = "Test Mail";
Collection<String> sendTo = new ArrayList<String>();
sendTo.add("abc@gmail.com");
String htmlMessage = "<html><body><font size='15' color='red'>This is a test mail.</font></body></html>";
// Create email message
HtmlEmail email = new HtmlEmail();
email.setHostName("smtp.gmail.com");
email.setSSL(true);
email.setSslSmtpPort("465");
email.setSubject(subject);
email.setCharset("GB2312");
email.setAuthentication("abc", "1111");
try
email.setFrom("def@gmail.com");
for(String aTo : sendTo)
email.addTo(aTo);
email.setHtmlMsg(htmlMessage);
// send email
email.send();
catch (EmailException ee)
ee.printStackTrace();
public static void main(String args[])
sendHtmlEmail();
本回答被提问者采纳 参考技术C javamail不就可以吗?
如何用java发邮件?[重复]
我试图用这个代码发送电子邮件,但每次都显示用户名和密码不接受.但我已经做了一切。我也设置了我的Gmail账户访问第三方应用程序。现在我不明白问题出在哪里。
Exception in thread "main" javax.mail.AuthenticationFailedException: 535-5.7.8 Username and Password not accepted. Learn more at
535 5.7.8 https://support.google.com/mail/?p=BadCredentials d8sm6051763pfd.159 - gsmtp
at com.sun.mail.smtp.SMTPTransport$Authenticator.authenticate(SMTPTransport.java:965)
at com.sun.mail.smtp.SMTPTransport.authenticate(SMTPTransport.java:876)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:780)
at javax.mail.Service.connect(Service.java:388)
at javax.mail.Service.connect(Service.java:246)
at javax.mail.Service.connect(Service.java:195)
at javax.mail.Transport.send0(Transport.java:254)
at javax.mail.Transport.send(Transport.java:124)
at com.mirajhossain.TransMail.sendMail(Main.java:37)
at com.mirajhossain.Main.main(Main.java:52)][1]
这是我的代码。
class TransMail{
public static void sendMail(String recepient) throws MessagingException {
Properties properties=new Properties();
properties.put("mail.from","REDACTED");
properties.put(" mail.user","REDACTED");
properties.put(" mail.passr","REDACTED");
properties.put("mail.smtp.auth","true");
properties.put("mail.smtp.starttls.enable","true");
properties.put("mail.smtp.host","smtp.gmail.com");
properties.put("mail.smtp.ssl.trust", "smtp.gmail.com");
properties.put("mail.smtp.port","587");
String myAccount="miraj98hossain@gmail.com";
String pwd="69miraj69hossain69shawon69";
Session session= Session.getInstance(properties, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(myAccount,pwd);
}
});
Message message= preparemessage(session,myAccount,recepient);
Transport.send(message);
System.out.println("yes");
}
private static Message preparemessage(Session session, String myAccount,String recepient) throws MessagingException {
Message message=new MimeMessage(session);
message.setFrom(new InternetAddress(myAccount));
message.setRecipient(Message.RecipientType.TO,new InternetAddress(recepient));
message.setSubject("Verification");
message.setText("1254562");
return message;
}
}
public class Main{
public static void main(String[] args) throws MessagingException {
TransMail.sendMail("miraj09hossain@gmail.com");
}
}
答案
确保你必须从你的gmail账户设置中打开不太安全的应用程序访问。
public class Main {
public static void main(String [] args)
{
// Sender's email ID needs to be mentioned
String from = "test@gmail.com";
String pass ="xxxxxxx";
// Recipient's email ID needs to be mentioned.
String to = "test313@gmail.com";
String host = "smtp.gmail.com";
// Get system properties
Properties properties = System.getProperties();
// Setup mail server
properties.put("mail.smtp.starttls.enable", "true");
properties.put("mail.smtp.host", host);
properties.put("mail.smtp.user", from);
properties.put("mail.smtp.password", pass);
properties.put("mail.smtp.port", "587");
properties.put("mail.smtp.auth", "true");
// Get the default Session object.
Session session = Session.getDefaultInstance(properties);
int Vcode=(int)(10000+Math.random()*(20000-10000+1));
try{
// Create a default MimeMessage object.
MimeMessage message = new MimeMessage(session);
// Set From: header field of the header.
message.setFrom(new InternetAddress(from));
// Set To: header field of the header.
message.addRecipient(Message.RecipientType.TO,
new InternetAddress(to));
// Set Subject: header field
message.setSubject("Email Verification");
// Now set the actual message
message.setText("Your verification code for our app is"+Vcode+".
"+"Enter this code for complete your sign up process");
// Send message
Transport transport = session.getTransport("smtp");
transport.connect(host, from, pass);
transport.sendMessage(message, message.getAllRecipients());
transport.close();
System.out.println("Sent message successfully....");
}catch (MessagingException mex) {
mex.printStackTrace();
}
}
}
另一答案
我使用的是JavaMail库。看看它的样子。
配置:
JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
mailSender.setHost(host); // for example smtp.gmail.com
mailSender.setPort(port); // 465
mailSender.setUsername(username); // your email
mailSender.setPassword(password); // your password
Properties properties = mailSender.getJavaMailProperties();
properties.setProperty("mail.transport.protocol", protocol); // smtps
properties.setProperty("mail.debug", debug); // as you wish
properties.setProperty("mail.smtp.auth", auth); // true
properties.setProperty("mail.smtp.starttls.enable", enable); // true
}
发送消息。
private void send(String subject, String message) {
SimpleMailMessage mailMessage = new SimpleMailMessage();
mailMessage.setFrom(emailFrom);
mailMessage.setTo(emailTo); // receiver
mailMessage.setSubject(subject);
mailMessage.setText(message);
mailSender.send(mailMessage);
}
试试这个。
以上是关于如何用java实现发送html格式的邮件的主要内容,如果未能解决你的问题,请参考以下文章