可以選擇使用log4j,它是一款開源的日志記錄工具,提供發(fā)送日志郵件功能
創(chuàng)新互聯(lián)建站專注于成華企業(yè)網(wǎng)站建設,成都響應式網(wǎng)站建設,電子商務商城網(wǎng)站建設。成華網(wǎng)站建設公司,為成華等地區(qū)提供建站服務。全流程定制網(wǎng)站開發(fā),專業(yè)設計,全程項目跟蹤,創(chuàng)新互聯(lián)建站專業(yè)和態(tài)度為您提供的服務
Log4j發(fā)送日志郵件的作用:
項目錯誤信息能及時(實時)反映給項目維護人員以及相關負責人。
優(yōu)點:
1.快速響應;
2.共同監(jiān)督;
3.郵件正文直接顯示了錯誤信息,拷貝信息比登陸服務器再查找要方便;
4.在日志信息繼續(xù)寫入文件的前提下,多了另外一種獲取信息的渠道。
補充:Log4j可以實現(xiàn)輸出到控制臺,文件,回滾文件,發(fā)送日志郵件,數(shù)據(jù)庫,自定義標簽。
發(fā)送郵件的一個重要的類是SMTPAppender,之前用的是 log4j-1.2.8,在1.2.8的版本中,SMTPAppender沒有SMTPPassword 和SMTPUsername 屬性。這兩個屬性分別是登錄SMTP服務器發(fā)送認證的用戶名和密碼。
依賴的jar包:
log4j-1.2.15.jar(版本低于log4j-1.2.14.jar不支持SMTP認證)
mail.jar
activation.jar
在log4j.properties文件中配置:
### send error through email.
#log4j的郵件發(fā)送appender,如果有必要你可以寫自己的appender
log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender
#發(fā)送郵件的門檻,僅當?shù)扔诨蚋哂贓RROR(比如FATAL)時,郵件才被發(fā)送
log4j.appender.MAIL.Threshold=ERROR
#緩存文件大小,日志達到10k時發(fā)送Email
log4j.appender.MAIL.BufferSize=10
#發(fā)送郵件的郵箱帳號
log4j.appender.MAIL.From=xxx@163.com
#SMTP郵件發(fā)送服務器地址
log4j.appender.MAIL.SMTPHost=smtp.163.com
#SMTP發(fā)送認證的帳號名
log4j.appender.MAIL.SMTPUsername=xxx@163.com
#SMTP發(fā)送認證帳號的密碼
log4j.appender.MAIL.SMTPPassword=xxx
#是否打印調試信息,如果選true,則會輸出和SMTP之間的握手等詳細信息
log4j.appender.MAIL.SMTPDebug=false
#郵件主題
log4j.appender.MAIL.Subject=Log4JErrorMessage
#發(fā)送到什么郵箱,如果要發(fā)送給多個郵箱,則用逗號分隔;
#如果需要發(fā)副本給某人,則加入下列行
#log4j.appender.MAIL.Bcc=xxx@xxx.xxx
log4j.appender.MAIL.To=xxx@xxx.com
log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout
log4j.appender.MAIL.layout.ConversionPattern=[framework]%d - %c -%-4r[%t]%-5p %c %x -%m%n
在java代碼中,可是用logger.info("message");方法將message代表的消息發(fā)送到指定郵箱中
方法:
1.前提準備工作:
首先,郵件的發(fā)送方要開啟POP3 和SMTP服務--即發(fā)送qq郵件的賬號要開啟POP3 和SMTP服務
2.開啟方法:
登陸qq郵箱
3.點擊 設置
4.點擊—-賬戶
5.找到:POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服務 —點擊開啟
6.送短信 —–點擊確定
7.稍等一會,很得到一個授權碼! –注意:這個一定要記住,一會用到
8.點擊保存修改 —OK 完成
9.java 測試代碼:
package cn.cupcat.test;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMessage.RecipientType;
public class SendmailUtil {
public static void main(String[] args) throws AddressException, MessagingException {
Properties properties = new Properties();
properties.put("mail.transport.protocol", "smtp");// 連接協(xié)議
properties.put("mail.smtp.host", "smtp.qq.com");// 主機名
properties.put("mail.smtp.port", 465);// 端口號
properties.put("mail.smtp.auth", "true");
properties.put("mail.smtp.ssl.enable", "true");//設置是否使用ssl安全連接 ---一般都使用
properties.put("mail.debug", "true");//設置是否顯示debug信息 true 會在控制臺顯示相關信息
//得到回話對象
Session session = Session.getInstance(properties);
// 獲取郵件對象
Message message = new MimeMessage(session);
//設置發(fā)件人郵箱地址
message.setFrom(new InternetAddress("123456789@qq.com"));
//設置收件人地址 message.setRecipients( RecipientType.TO, new InternetAddress[] { new InternetAddress("987654321@qq.com") });
//設置郵件標題
message.setSubject("這是第一封Java郵件");
//設置郵件內容
message.setText("內容為: 這是第一封java發(fā)送來的郵件。");
//得到郵差對象
Transport transport = session.getTransport();
//連接自己的郵箱賬戶
transport.connect("123456789@qq.com", "vvctybgbvvophjcj");//密碼為剛才得到的授權碼
//發(fā)送郵件 transport.sendMessage(message, message.getAllRecipients());
}
}
10.運行就會發(fā)出郵件了。。。。
下面是我收到郵件的截圖,當然我把源碼中的郵件地址都是修改了,不是真實的,你們測試的時候,可以修改能你們自己的郵箱。最后,祝你也能成功,如果有什么問題,可以一起討論!
注意事項
得到的授權碼一定要保存好,程序中要使用
public class MailTest {
//發(fā)送的郵箱 內部代碼只適用qq郵箱
private static final String USER = "xxxxx@qq.com";
//授權密碼 通過QQ郵箱設置-賬戶-POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服務-開啟POP3/SMTP服務獲取
private static final String PWD = "xxxxx";
private String[] to;
private String[] cc;//抄送
private String[] bcc;//密送
private String[] fileList;//附件
private String subject;//主題
private String content;//內容,可以用html語言寫
public void sendMessage() throws Exception {
// 配置發(fā)送郵件的環(huán)境屬性
final Properties props = new Properties();
//下面兩段代碼是設置ssl和端口,不設置發(fā)送不出去。
props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
//props.setProperty("mail.smtp.port", "465");
props.setProperty("mail.smtp.socketFactory.port", "465");
// 表示SMTP發(fā)送郵件,需要進行身份驗證
props.setProperty("mail.transport.protocol", "smtp");// 設置傳輸協(xié)議
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.host", "smtp.qq.com");//QQ郵箱的服務器 如果是企業(yè)郵箱或者其他郵箱得更換該服務器地址
// 發(fā)件人的賬號
props.put("mail.user", USER);
// 訪問SMTP服務時需要提供的密碼
props.put("mail.password", PWD);
// 構建授權信息,用于進行SMTP進行身份驗證
Authenticator authenticator = new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
// 用戶名、密碼
String userName = props.getProperty("mail.user");
String password = props.getProperty("mail.password");
return new PasswordAuthentication(userName, password);
}
};
// 使用環(huán)境屬性和授權信息,創(chuàng)建郵件會話
Session mailSession = Session.getInstance(props, authenticator);
// 創(chuàng)建郵件消息
MimeMessage message = new MimeMessage(mailSession);
BodyPart messageBodyPart = new MimeBodyPart();
Multipart multipart = new MimeMultipart();
// 設置發(fā)件人
InternetAddress form = new InternetAddress(
props.getProperty("mail.user"));
message.setFrom(form);
//發(fā)送
if (to != null) {
String toList = getMailList(to);
InternetAddress[] iaToList = new InternetAddress().parse(toList);
message.setRecipients(RecipientType.TO, iaToList); // 收件人
}
//抄送
if (cc != null) {
String toListcc = getMailList(cc);
InternetAddress[] iaToListcc = new InternetAddress().parse(toListcc);
message.setRecipients(RecipientType.CC, iaToListcc); // 抄送人
}
//密送
if (bcc != null) {
String toListbcc = getMailList(bcc);
InternetAddress[] iaToListbcc = new InternetAddress().parse(toListbcc);
message.setRecipients(RecipientType.BCC, iaToListbcc); // 密送人
}
message.setSentDate(new Date()); // 發(fā)送日期 該日期可以隨意寫,你可以寫上昨天的日期(效果很特別,親測,有興趣可以試試),或者抽象出來形成一個參數(shù)。
message.setSubject(subject); // 主題
message.setText(content); // 內容
//顯示以html格式的文本內容
messageBodyPart.setContent(content,"text/html;charset=utf-8");
multipart.addBodyPart(messageBodyPart);
//保存多個附件
if(fileList!=null){
addTach(fileList, multipart);
}
message.setContent(multipart);
// 發(fā)送郵件
Transport.send(message);
}
public void setTo(String[] to) {
this.to = to;
}
public void setCc(String[] cc) {
this.cc = cc;
}
public void setBcc(String[] bcc) {
this.bcc = bcc;
}
public void setSubject(String subject) {
this.subject = subject;
}
public void setContent(String content) {
this.content = content;
}
public void setFileList(String[] fileList) {
this.fileList = fileList;
}
private String getMailList(String[] mailArray) {
StringBuffer toList = new StringBuffer();
int length = mailArray.length;
if (mailArray != null length 2) {
toList.append(mailArray[0]);
} else {
for (int i = 0; i length; i++) {
toList.append(mailArray[i]);
if (i != (length - 1)) {
toList.append(",");
}
}
}
return toList.toString();
}
//添加多個附件
public void addTach(String fileList[], Multipart multipart) throws Exception {
for (int index = 0; index fileList.length; index++) {
MimeBodyPart mailArchieve = new MimeBodyPart();
FileDataSource fds = new FileDataSource(fileList[index]);
mailArchieve.setDataHandler(new DataHandler(fds));
mailArchieve.setFileName(MimeUtility.encodeText(fds.getName(),"UTF-8","B"));
multipart.addBodyPart(mailArchieve);
}
}
//以下是演示demo
public static void main(String args[]) {
MailTest mail = new MailTest();
mail.setSubject("java郵件");
mail.setContent("你好 這是第一個java 程序發(fā)送郵件");
//收件人 可以發(fā)給其他郵箱(163等) 下同
mail.setTo(new String[] {"xxxxx@qq.com"});
//抄送
// mail.setCc(new String[] {"xxxxx@qq.com","xxxxx@qq.com"});
//密送
//mail.setBcc(new String[] {"xxxxx@qq.com","xxxxx@qq.com"});
//發(fā)送附件列表 可以寫絕對路徑 也可以寫相對路徑(起點是項目根目錄)
// mail.setFileList(new String[] {"D:\\aa.txt"});
//發(fā)送郵件
try {
mail.sendMessage();
System.out.println("發(fā)送郵件成功!");
} catch (Exception e) {
System.out.println("發(fā)送郵件失??!");
e.printStackTrace();
}
}
}
要實現(xiàn)郵件發(fā)送功能需要導入包:mail.jar
/*
* Generated by MyEclipse Struts
* Template path: templates/java/JavaClass.vtl
*/
package org.demo.action;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.demo.form.DemoForm;
public class DemoAction extends Action {
private static final String CONTENT_TYPE = "test/html;charset=GB2312";
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
DemoForm demoForm = (DemoForm) form;
System.out.println("標題是" + demoForm.getBiaoti());
System.out.println("內容是" + demoForm.getNeirong());
try {
response.setContentType(CONTENT_TYPE);
String smtphost = "smtp.nj.headware.cn"; // 發(fā)送郵件服務器
String user = "q0000015369"; // 郵件服務器登錄用戶名
String password = "Queshuwen26"; // 郵件服務器登錄密碼
String from = "q0000015369@nj.headware.cn"; //
String to = "c0000016205@nj.headware.cn"; // 收件人郵件地址
String subject = demoForm.getBiaoti(); // 郵件標題
String body = demoForm.getNeirong(); // 郵件內容
Properties props = new Properties();
props.put("mail.smtp.host", smtphost);
props.put("mail.smtp.auth", "true");
Session ssn = Session.getInstance(props, null);
MimeMessage message = new MimeMessage(ssn);
InternetAddress fromAddress = new InternetAddress(from);
message.setFrom(fromAddress);
InternetAddress toAddress = new InternetAddress(to);
message.addRecipient(Message.RecipientType.TO, toAddress);
message.setSubject(subject);
message.setText(body);
Transport transport = ssn.getTransport("smtp");
transport.connect(smtphost, user, password);
transport.sendMessage(message, message
.getRecipients(Message.RecipientType.TO));
// transport.send(message);
transport.close();
return mapping.findForward("succ");
} catch (Exception e) {
e.printStackTrace();
return mapping.findForward("fail");
}
}
}
要兩個java文件 還有一個mail.jar是不是只能用javamail誰也不敢說
第一個:
public class Constant {
public static final String mailAddress ="用戶名@163.com";
public static final String mailCount ="用戶名";
public static final String mailPassword ="密碼";
public static final String mailServer ="smtp.163.com";
//pukeyouxintest,
}
第二個:
import java.util.Date;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class SendMail {
/**
* 發(fā)送簡單郵件
* @param str_from:發(fā)件人地址
* @param str_to:收件人地址
* @param str_title:郵件標題
* @param str_content:郵件正文
*/
public static void send(String str_from,String str_to,String str_title,String str_content) {
// str_content="a href=''html元素/a"; //for testing send html mail!
try {
//建立郵件會話
Properties props=new Properties(); //用來在一個文件中存儲鍵-值對的,其中鍵和值是用等號分隔的,
//存儲發(fā)送郵件服務器的信息
props.put("mail.smtp.host",Constant.mailServer);
//同時通過驗證
props.put("mail.smtp.auth","true");
//根據(jù)屬性新建一個郵件會話
Session s=Session.getInstance(props);
s.setDebug(true); //有他會打印一些調試信息。
//由郵件會話新建一個消息對象
MimeMessage message=new MimeMessage(s);
//設置郵件
InternetAddress from= new InternetAddress(str_from); //pukeyouxintest2@163.com
message.setFrom(from); //設置發(fā)件人的地址
//
// //設置收件人,并設置其接收類型為TO
InternetAddress to=new InternetAddress(str_to); //pukeyouxintest3@163.com
message.setRecipient(Message.RecipientType.TO, to);
//設置標題
message.setSubject(str_title); //java學習
//設置信件內容
// message.setText(str_content); //發(fā)送文本郵件 //你好嗎?
message.setContent(str_content, "text/html;charset=gbk"); //發(fā)送HTML郵件 //b你好/bbrp大家好/p
//設置發(fā)信時間
message.setSentDate(new Date());
//存儲郵件信息
message.saveChanges();
//發(fā)送郵件
Transport transport=s.getTransport("smtp");
//以smtp方式登錄郵箱,第一個參數(shù)是發(fā)送郵件用的郵件服務器SMTP地址,第二個參數(shù)為用戶名,第三個參數(shù)為密碼
transport.connect(Constant.mailServer,Constant.mailCount,Constant.mailPassword);
//發(fā)送郵件,其中第二個參數(shù)是所有已設好的收件人地址
transport.sendMessage(message,message.getAllRecipients());
transport.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
//測試用的,你吧你想寫的內容寫上去就行
send(Constant.mailAddress,"收件人郵箱","標題","b內容/b");
}
}
然后把mail.jar導入,就可以了,我用的是163 的,其他的吧相應的服務器改一下就行了
public boolean mainto()
{
boolean flag = true;
//建立郵件會話
Properties pro = new Properties();
pro.put("mail.smtp.host","smtp.qq.com");//存儲發(fā)送郵件的服務器
pro.put("mail.smtp.auth","true"); //通過服務器驗證
Session s =Session.getInstance(pro); //根據(jù)屬性新建一個郵件會話
//s.setDebug(true);
//由郵件會話新建一個消息對象
MimeMessage message = new MimeMessage(s);
//設置郵件
InternetAddress fromAddr = null;
InternetAddress toAddr = null;
try
{
fromAddr = new InternetAddress(451144426+"@qq.com"); //郵件發(fā)送地址
message.setFrom(fromAddr); //設置發(fā)送地址
toAddr = new InternetAddress("12345367@qq.com"); //郵件接收地址
message.setRecipient(Message.RecipientType.TO, toAddr); //設置接收地址
message.setSubject(title); //設置郵件標題
message.setText(content); //設置郵件正文
message.setSentDate(new Date()); //設置郵件日期
message.saveChanges(); //保存郵件更改信息
Transport transport = s.getTransport("smtp");
transport.connect("smtp.qq.com", "451144426", "密碼"); //服務器地址,郵箱賬號,郵箱密碼
transport.sendMessage(message, message.getAllRecipients()); //發(fā)送郵件
transport.close();//關閉
}
catch (Exception e)
{
e.printStackTrace();
flag = false;//發(fā)送失敗
}
return flag;
}
這是一個javaMail的郵件發(fā)送代碼,需要一個mail.jar