一、预览
无
二、代码
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.MessagingException;
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;
import javax.mail.internet.MimeUtility;
import com.net263.crm.util.mail.EmailAuthenticator;
public class SendEmailUtil {
/**
*
* @Description TODO
* @author xxxxx
* @param sendEmailSMTPHost 邮件服务器 qq邮箱服务器是smtp.qq.com
* @param myEmailAccount 用户名(邮箱)
* @param sendmailName 发送人(邮箱上面显示得昵称)
* @param myEmailPassword 密码
* @param receivemailUsers 接收人
* @param receivemailCCUsers 抄送人
* @param meetingtitle 邮件主题
* @param contentfile 邮件内容(html)
* @param fileList 附件集合
* @throws IOException
* @throws MessagingException
* void
*/
public static void sendNoticeMail(String sendEmailSMTPHost, String myEmailAccount, String sendmailName,
String myEmailPassword, String receivemailUsers,String receivemailCCUsers, String meetingtitle, File contentfile,List<File>fileList) throws IOException, MessagingException{
StringBuffer error = new StringBuffer();
// 1. 创建参数配置, 用于连接邮件服务器的参数配置
Properties props = new Properties(); // 参数配置
//props.setProperty("mail.transport.protocol", "smtp"); // 使用的协议(JavaMail规范要求)
props.setProperty("mail.smtp.host", sendEmailSMTPHost); // 发件人的邮箱的 SMTP 服务器地址
props.setProperty("mail.smtp.auth", "true"); // 需要请求认证
EmailAuthenticator auth = new EmailAuthenticator();//进行邮件服务器用户认证
auth.check(myEmailAccount, myEmailPassword);//用户名和密码
Session mailsession = Session.getInstance(props, auth);//设置session和邮件服务器进行通讯
StringBuffer subject = new StringBuffer(meetingtitle);
MimeMessage mailmess = new MimeMessage(mailsession);//获取一个跟邮件服务器通信对象
mailmess.setSubject(subject.toString(), "GB2312");
//发送人
InternetAddress from = new InternetAddress(myEmailAccount, sendmailName, "GB2312");
mailmess.setFrom(from);//设置邮件发送者地址
//mailmess.setContent("内容", "text/html;charset=GB2312");//设置邮件格式
//a.设置邮件内容,混合模式
MimeMultipart msgMultipart = new MimeMultipart("mixed");
mailmess.setContent(msgMultipart);
//b.设置消息正文
MimeBodyPart content = new MimeBodyPart();
msgMultipart.addBodyPart(content);
//c.设置正文格式
MimeMultipart bodyMultipart = new MimeMultipart("related");
content.setContent(bodyMultipart);
//d.设置正文内容
MimeBodyPart htmlPart = new MimeBodyPart();
bodyMultipart.addBodyPart(htmlPart);
htmlPart.setContent(readFileByBytesFile(contentfile), "text/html;charset=UTF-8");
//e.设置附件
for(int i = 0; i < fileList.size(); i++){
File file = fileList.get(i);
System.out.println("file: "+file);
try {
//设置相关文件
MimeBodyPart filePart = new MimeBodyPart();
FileDataSource dataSource = new FileDataSource(file);
DataHandler dataHandler = new DataHandler(dataSource);
// 文件处理
filePart.setDataHandler(dataHandler);
// 附件名称 防止中文乱码
//filePart.setFileName(file.getName());
filePart.setFileName(MimeUtility.encodeText(file.getName()));
// 放入正文(有先后顺序,所以在正文后面)
msgMultipart.addBodyPart(filePart);
} catch (Exception e) {
}
}
//多人发送加一个数组
InternetAddress[] isd = InternetAddress.parse(receivemailUsers);
mailmess.setRecipients(Message.RecipientType.TO, isd);//发送到的地址
InternetAddress[] isdCC = InternetAddress.parse(receivemailCCUsers);
mailmess.setRecipients(Message.RecipientType.CC, isdCC);//发送到的地址
Transport transport = mailsession.getTransport("smtp");
transport.connect(sendEmailSMTPHost, "", "");//获取服务器连接
Transport.send(mailmess);//发送邮件
transport.close();//关闭连接
}
public static String readFileByBytesFile(File file) throws IOException {
InputStream fis = new FileInputStream(file);
StringBuffer sb = new StringBuffer();
try {
InputStreamReader reader = new InputStreamReader(fis,"UTF-8");
BufferedReader br = new BufferedReader(reader);
System.out.println("br:"+br.toString());
String line;
while ((line = br.readLine()) != null) {
//System.out.println(line);
sb.append(line);
}
br.close();
reader.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (fis != null) {
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return sb.toString();
}
}
因业务需求,第二个方法是将文件(html)转为String,又用于邮件内容
三、知识拓展
1、下面两个方法,一个是发送一个是抄送,字符串中邮箱之间用","隔开即可
InternetAddress[] isd = InternetAddress.parse(receivemailUsers);
mailmess.setRecipients(Message.RecipientType.TO, isd);//发送到的地址
InternetAddress[] isdCC = InternetAddress.parse(receivemailCCUsers);
mailmess.setRecipients(Message.RecipientType.CC, isdCC);//发送到的地址
2、在服务器上ping一下邮箱服务,ping不同ping下www.baidu.com还是不行,就是dns没设置好