📄 mailutil.java
字号:
Session session = Session.getDefaultInstance(properties, new Authenticator() {
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(user, password);
}
});//获得邮件会话对象
MimeMessage mimeMsg = new MimeMessage(session);//创建MIME邮件对象
if (sender != null) //设置发件人地址
mimeMsg.setFrom(new InternetAddress(sender));
if (receiver != null) //设置收件人地址
mimeMsg.setRecipients(Message.RecipientType.TO, parse(receiver));
if (copyReceiver != null) //设置抄送人地址
mimeMsg.setRecipients(Message.RecipientType.CC, parse(copyReceiver));
if (hiddenReceiver != null) //设置暗送人地址
mimeMsg.setRecipients(Message.RecipientType.BCC, parse(hiddenReceiver));
if (subject != null) //设置邮件主题
mimeMsg.setSubject(subject, "GBK");
MimeBodyPart part = new MimeBodyPart();//mail内容部分
part.setText(content == null ? "" : content, "GBK");
part.setContent(this.getContent(), TEXT_H + ";charset=GBK");
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(part); //在 Multipart 中增加mail内容部分
if (affixPath != null) //mail附件部分
{
ArrayList parts = parsePath(affixPath);
for (int i = 0; i < parts.size(); i++) {
multipart.addBodyPart((MimeBodyPart) parts.get(i));
}
}
mimeMsg.setContent(multipart); //增加 Multipart 到信息体
mimeMsg.setSentDate(new Date());//设置发送日期
Transport.send(mimeMsg); //发送邮件
} else {
// 通过Socket发送电子邮件。
try {
this.sendMail(receiver);
} catch (Exception ex) {
throw new MessagingException(ex.getMessage());
}
}
}
/**
* <p>Title: 电子邮件实用工具 </p>
* <p>Description: 解析地址集合字符串</p>
* <p>Method:parse</p>
* <p>Copyright: Copyright (c) 2005</p>
* <p>Company: FuJian NewDoone </p>
* @throws MessagingException mail发送失败
* @author zengzc
* @version 1.0
*/
private InternetAddress[] parse(String addressSet) throws AddressException {
ArrayList list = new ArrayList();
StringTokenizer tokens = new StringTokenizer(addressSet, ";");
while (tokens.hasMoreTokens()) {
list.add(new InternetAddress(tokens.nextToken().trim()));
}
InternetAddress[] addressArray = new InternetAddress[list.size()];
list.toArray(addressArray);
return addressArray;
}
/**
* <p>Title: 电子邮件实用工具 </p>
* <p>Description: 解析附件路径字符串</p>
* <p>Method:parsePath</p>
* <p>Copyright: Copyright (c) 2005</p>
* <p>Company: FuJian NewDoone </p>
* @throws MessagingException mail发送失败
* @author zengzc
* @version 1.0
*/
private ArrayList parsePath(String affixPath) throws MessagingException {
ArrayList list = new ArrayList();
StringTokenizer tokens = new StringTokenizer(affixPath, ";");
while (tokens.hasMoreTokens()) {
MimeBodyPart part = new MimeBodyPart();
FileDataSource source = new FileDataSource(tokens.nextToken().trim());
part.setDataHandler(new DataHandler(source));
part.setFileName(source.getName());
list.add(part);
}
return list;
}
/**
* <p>Title: 电子邮件实用工具 </p>
* <p>Description: 发送电子邮件</p>
* <p>输入:发送者清单,用';'隔开</p>
* <p>输入:邮件主题</p>
* <p>输入:邮件内容</p>
* <p>输入:发送者电子邮件,为了防止将来可能存在多个发送者邮件,因此该邮箱由发送者自行定义</p>
* <p>配置文件:Email.properties</p>
* <p>配置说明:EmailServerName--电子邮件服务器</p>
* <p> FromAddress--发送者电子邮件</p>
* <p> FromUser--发送者</p>
* <p> FromUserPWD--发送者邮箱密码</p>
* <p> ifSMTPauth--是否需要发送验证,字符型,true或者false</p>
* <p>Method:initSetting</p>
* <p>Copyright: Copyright (c) 2005</p>
* <p>Company: FuJian NewDoone </p>
* @throws MessagingException mail发送失败
* @author zengzc
* @version 1.0
*/
public void initSetting(String recvList, String mailSubject, String mailContent) {
try {
ClassLoader cl = Thread.currentThread().getContextClassLoader();
InputStream is = cl.getResourceAsStream("Email.properties");
Properties dbProps = new Properties();
dbProps.load(is);
String mailserver = (String) dbProps.getProperty("EmailServerName");
String fromaddress = (String) dbProps.getProperty("FromAddress");
String fromuser = (String) dbProps.getProperty("FromUser");
String fromuserPWD = (String) dbProps.getProperty("FromUserPWD");
String ifSMTPauth = (String) dbProps.getProperty("ifSMTPauth");
if (ifSMTPauth.trim().toUpperCase().equals("TRUE")) //需要进行身份验证
{
ifSMTPauth = "true";
} else {
ifSMTPauth = "false";
}
setSmtpHost(mailserver);
setUser(fromuser);
setPassword(fromuserPWD);
setSender(fromaddress);
setReceiver(recvList);
setSubject(mailSubject);
setContent(mailContent);
//mail.setAffixPath("C:/BssSysFLD"); //添加附件
FileLogger.getLogger().debug("Java Email服务器的ip:" + mailserver);
FileLogger.getLogger().debug("邮件发送人的邮箱地址:" + fromaddress);
} catch (IOException ex) {
FileLogger.getLogger().error("没有取得服务器的路径:" + ex.getMessage(), ex);
}
}
/**
* <p>设置其他的发送人</p>
* @param CopyRecv 抄送人电子邮件,用;隔开
* @param HiddenRecv 暗松人电子邮件,用;隔开
* @author 曾忠诚
* @version 1.0
*/
public void setOtherRecevier(String CopyRecv, String HiddenRecv) {
setCopyReceiver(CopyRecv);
setHiddenReceiver(HiddenRecv);
}
private void sendCommand(Parameters parms, String cmd) throws IOException {
parms.mailOut.println(cmd);
parms.mailIn.readLine();
}
/**发送数据到主机的方法
*/
private void sendData(Parameters parms, String to, String subject, String message)
throws IOException {
parms.mailOut.println("data");
parms.mailIn.readLine();
StringBuffer mailContent = new StringBuffer();
mailContent.append("FROM:").append(this.getSender());
mailContent.append("\r\n");
mailContent.append("TO:").append(to);
mailContent.append("\r\n");
mailContent.append("subject:").append(subject);
mailContent.append("\r\n");
mailContent.append("Mime-Version: 1.0");
mailContent.append("\r\n");
mailContent.append("Content-Type: ").append(TEXT_H).append(";");
//mailContent.append("\r\n");
mailContent.append(" charset=\"GBK\"");
mailContent.append("\r\n");
mailContent.append("Content-Transfer-Encoding: 7bit");
mailContent.append("\r\n");
mailContent.append("X-RCPT-TO: <").append(this.getSender()).append(">");
mailContent.append("\r\n");
mailContent.append("\r\n");
mailContent.append(message);
mailContent.append("\r\n.\r\nquit");
parms.mailOut.println(mailContent.toString());
parms.mailIn.readLine();
}
private void sendMail(String eMail)throws Exception {
try {
Parameters parms = new Parameters();
parms.socket = new Socket(this.getSmtpHost(), 25);
parms.mailOut = new PrintWriter(parms.socket.getOutputStream(), true);
parms.mailIn = new BufferedReader(new InputStreamReader(parms.socket.getInputStream()));
parms.mailIn.readLine();
sendCommand(parms, "HELO fj.ct10000.com");
sendCommand(parms, "mail from:" + this.getSender());
sendCommand(parms, "rcpt to:" + eMail);
String subject = this.getSubject();
String message = this.getContent();
sendData(parms, eMail, subject, message);
parms.socket.close();
} catch (Exception ex) {
FileLogger.getLogger().warn(ex.getMessage(), ex);
throw ex;
}
}
class Parameters {
Socket socket;
PrintWriter mailOut;
BufferedReader mailIn;
}
/**
*
* @param args
* @author 曾忠诚
* <p>测试方法</p>
*/
public static void main(String[] args) {
MailUtil mail = new MailUtil();
mail.initSetting("janage@fj.ct10000.com", "这是邮件测试",
"<html><body><font size=9pt>这是邮件测试</font></body></html>");
try {
mail.smtp();
System.out.print("send success!");
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -