Java使用代理发送邮件

最近用Java写个发邮件的东东,然后打成jar包,jar包可以放在任何地方邮件正常发送

要求 :

1、网络正常的情况下,可以发送;

2、网络不正常的时候,需要使用内网连接到外网,使用代理发送邮件。

部分代码拿出来分享一下:

package com.zyuc.mail;

import java.io.File;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import javax.activation.*;
import javax.mail.*;
import javax.mail.internet.*;
import org.apache.log4j.Logger;
import com.zyuc.domParse.DomParseXml;
import com.zyuc.util.UtilTools;

/**
 * 邮件发送
 * @author wangxw
 * 2011-10-26
 */
public class JmailConfig {
 
 private static Logger logger =  Logger.getLogger(JmailConfig.class);
 private static Map map = new HashMap();
 private static JmailFileRead jmailFileRead = new JmailFileRead();
 public  String Email_Text = new String();
 private static JmailConfig mail = new JmailConfig();
 
 /**
  *构造函数 初始化参数信息
  */
 public JmailConfig(){
  //获得配置文件
  String configPath = UtilTools.getPath()+File.separator+"JmailConfig.xml";
  File file = new File(configPath);
  //加载配置文件信息
  if(file.exists()){
   map = new DomParseXml().parseXml(configPath);
   Email_Text = jmailFileRead.fileRead(map.get("Email_Text").toString());
  }else{
   logger.error("邮件配置文件未找到");
  }
 }
 
 /**
  * 邮件附件的添加
  * @param multipart
  * @param filePath
  * @param fileName
  * @param k
  * @return boolean
  */
 private boolean addMultipart(Multipart multipart, String filePath,
   String fileName, int k) {
  boolean flag = true;
  try {
   MimeBodyPart messageBodyPart = new MimeBodyPart();
   if (k == 0) {
    messageBodyPart.setText(Email_Text);
    multipart.addBodyPart(messageBodyPart);
   }
   messageBodyPart = new MimeBodyPart();
   DataSource source = new FileDataSource(filePath);
   messageBodyPart.setDataHandler(new DataHandler(source));
   messageBodyPart.setFileName(fileName);
   multipart.addBodyPart(messageBodyPart);
  } catch (Exception e) {
   flag = false;
   logger.error("邮件附件的添加失败" + e.getMessage());
   e.printStackTrace();
  }
  return flag;
 }
 
 /**
  * 发送邮件信息配置
  * @return boolean
  */
 public boolean sendMail(){
  boolean sendFlag = true;
  final String username = map.get("Email_User").toString();
  final String password = map.get("Email_Pswd").toString();
 
  Session session;
  //获得是否使用代理发送的标识
  String Email_Proxy_Flag = map.get("Email_Proxy_Flag").toString();
  if("1".equalsIgnoreCase(Email_Proxy_Flag)){
   //若Email_Proxy_Flag==1则使用代理发送
   try {
    Properties props = System.getProperties();
    props.put("mail.smtp.auth", "true");
    props.setProperty("proxySet", "true");
    props.setProperty("mail.stmp.host", map.get("Email_Host").toString());
    props.setProperty("http.proxyhost",map.get("Email_Proxy_Host").toString());
    props.setProperty("http.proxyport",map.get("Email_Proxy_Port").toString());
   
    session = Session.getDefaultInstance(props,
      new Authenticator() {
       protected javax.mail.PasswordAuthentication getPasswordAuthentication() {
        return new javax.mail.PasswordAuthentication(
          username, password);
       }
      });
    MimeMessage message = new MimeMessage(session);
    message.setFrom(new InternetAddress(map.get("Email_From").toString()));
  
    //多个接受者
    String[] to = map.get("Email_To").toString().split(";");
    if (to != null) {
     InternetAddress[] toAddress = new InternetAddress[to.length];
     for (int i = 0; i < to.length; i++) {
      toAddress[i] = new InternetAddress(to[i]);
     }
     message.addRecipients(Message.RecipientType.TO, toAddress);
    }
   
    //多个抄送者
    String[] cc = map.get("Email_Cc").toString().split(";");
    if (null != cc) {
     InternetAddress[] ccAddress = new InternetAddress[cc.length];
     for (int j = 0; j < cc.length; j++) {
      ccAddress[j] = new InternetAddress(cc[j]);
     }
     message.addRecipients(Message.RecipientType.CC, ccAddress);
    }
    message.setSubject(map.get("Email_Subject").toString());
   
   
    //附件功能
    Multipart multipart = new MimeMultipart();
    String[] filepath = map.get("FilePath").toString().split(";");
    String[] attachName =  map.get("AttachName").toString().split(";");
    if (null != filepath) {
     for (int k = 0; k < filepath.length; k++) {
      addMultipart(multipart, filepath[k], attachName[k], k);
     }
    } else if (null == filepath) {
     message.setText(Email_Text);
    }
    message.setContent(multipart);
   
    Transport transport = session.getTransport("smtp");
    transport.connect(map.get("Email_Host").toString(), username, password);
    transport.sendMessage(message, message.getAllRecipients());
    transport.close();
    } catch (Exception e) {
     sendFlag = false;
     logger.error("使用代理发送邮件出错" + e.getMessage());
     e.printStackTrace();
    }
  }else{
   //若Email_Proxy_Flag!=1则不使用代理发送
   try {
    Properties props = System.getProperties();
    props.put("mail.smtp.auth", "true");
    props.setProperty("mail.stmp.host", map.get("Email_Host").toString());
   
    session = Session.getDefaultInstance(props,
      new Authenticator() {
       protected javax.mail.PasswordAuthentication getPasswordAuthentication() {
        return new javax.mail.PasswordAuthentication(
          username, password);
       }
      });
    MimeMessage message = new MimeMessage(session);
    message.setFrom(new InternetAddress(map.get("Email_From").toString()));
  
    //多个接收者
    String[] to = map.get("Email_To").toString().split(";");
    if (to != null) {
     InternetAddress[] toAddress = new InternetAddress[to.length];
     for (int i = 0; i < to.length; i++) {
      toAddress[i] = new InternetAddress(to[i]);
     }
     message.addRecipients(Message.RecipientType.TO, toAddress);
    }
   
    //多个抄送者
    String[] cc = map.get("Email_Cc").toString().split(";");
    if (null != cc && cc.length > 0) {
     InternetAddress[] ccAddress = new InternetAddress[cc.length];
     for (int j = 0; j < cc.length; j++) {
      ccAddress[j] = new InternetAddress(cc[j]);
     }
     message.addRecipients(Message.RecipientType.CC, ccAddress);
    }
    message.setSubject(map.get("Email_Subject").toString());
   
    //附件功能
    Multipart multipart = new MimeMultipart();
    String[] filepath = map.get("FilePath").toString().split(";");
    String[] attachName =  map.get("AttachName").toString().split(";");
    if (null != filepath && filepath.length > 0 && attachName.length > 0 && filepath.length == attachName.length) {
     for (int k = 0; k < filepath.length; k++) {
      addMultipart(multipart, filepath[k], attachName[k], k);
     }
    } else if (null == filepath) {
     message.setText(Email_Text);
    }
    message.setContent(multipart);
   
    Transport transport = session.getTransport("smtp");
    transport.connect(map.get("Email_Host").toString(), username, password);
    transport.sendMessage(message, message.getAllRecipients());
    transport.close();
   } catch (Exception e) {
    sendFlag = false;
    logger.error("发送邮件出错" + e.getMessage());
    e.printStackTrace();
   }
  }
  return sendFlag;
 }
 
 public String returnMessage(){
  boolean flag = mail.sendMail();
  StringBuffer sb = new StringBuffer();
  if(flag){
   sb.append("\n").append("邮件发送已成功").append("\t").append("\n");
   sb.append("邮件发送者:" + map.get("Email_From").toString()).append("\t").append("\n");
   sb.append("邮件发送至:" + map.get("Email_To").toString()).append("\t").append("\n");
   sb.append("邮件抄送给:" + map.get("Email_Cc").toString()).append("\t").append("\n");
   sb.append("邮件正文为:" + map.get("Email_Text").toString()).append("\t").append("\n");
   sb.append("发送时间是:" + UtilTools.getDate()).append("\t").append("\n");
  }else{
   sb.append("\n").append("邮件发送失败").append("\t").append("\n");
   sb.append("发送时间是:" + UtilTools.getDate()).append("\t").append("\n");
  }
  return sb.toString();
 }
 
 public static void main(String args[]) {
  logger.info("===============开始发送=================");
  logger.info(mail.returnMessage());
  logger.info("===============发送结束=================");
 }
}

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wyjpwg.html