从网上找了一个些资料,再原本的基础上增加的发送附件功能,附件上传的最大容量 默认20M
需要导入一个包mail.jar,随便下一个吧
package common;
/**
* 发送邮件需要使用的基本信息
*/
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
public class MailSenderInfo {
// 发送邮件的服务器的IP和端口
private String mailServerHost;
private String mailServerPort = "25";
// 邮件发送者的地址
private String fromAddress;
// 邮件接收者的地址
//private String toAddress;
private List<String> toAddress;
// 邮件抄送者的地址
private List<String> ccAddress;
// 邮件暗送者的地址
private List<String> bccAddress;
// 登陆邮件发送服务器的用户名和密码
private String userName;
private String password;
// 是否需要身份验证
private boolean validate = true;
// 邮件主题
private String subject;
// 邮件的文本内容
private String content;
// 邮件附件的文件名
private String[] attachFileNames;
//邮件附件路径
private List<String> filePaths;
//是否打印邮件发送调试信息
private boolean debug;
//附件上传的最大容量 默认20M
public static final long fileMaxSize = 20971520;
public MailSenderInfo(){
this.debug = false;
this.toAddress = new ArrayList<String>();//收件人邮箱
this.ccAddress = new ArrayList<String>();//抄送人邮箱
this.bccAddress = new ArrayList<String>();//暗送人邮箱
this.filePaths =new ArrayList<String>();//附件
}
/**
* 获得邮件会话属性
*/
public Properties getProperties(){
Properties p = new Properties();
p.put("mail.smtp.host", this.mailServerHost);
p.put("mail.smtp.port", this.mailServerPort);
p.put("mail.smtp.auth", validate ? "true" : "false");
return p;
}
// public String getToAddress() {
// return this.toAddress;
// }
// public void setToAddress(String toAddress) {
// this.toAddress = toAddress;
// }
public String getMailServerHost() {
return mailServerHost;
}
public void setMailServerHost(String mailServerHost) {
this.mailServerHost = mailServerHost;
}
public String getMailServerPort() {
return mailServerPort;
}
public void setMailServerPort(String mailServerPort) {
this.mailServerPort = mailServerPort;
}
public boolean isValidate() {
return validate;
}
public void setValidate(boolean validate) {
this.validate = validate;
}
public String[] getAttachFileNames() {
return attachFileNames;
}
public void setAttachFileNames(String[] fileNames) {
this.attachFileNames = fileNames;
}
public String getFromAddress() {
return fromAddress;
}
public void setFromAddress(String fromAddress) {
this.fromAddress = fromAddress;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getContent() {
return content;
}
public void setContent(String textContent) {
this.content = textContent;
}
public List<String> getToAddress() {
return toAddress;
}
public void setToAddress(List<String> toAddress) {
this.toAddress = toAddress;
}
public List<String> getCcAddress() {
return ccAddress;
}
public void setCcAddress(List<String> ccAddress) {
this.ccAddress = ccAddress;
}
public List<String> getBccAddress() {
return bccAddress;
}
public void setBccAddress(List<String> bccAddress) {
this.bccAddress = bccAddress;
}
public void addToAddress(String mailAddress) {
this.toAddress.add(mailAddress);
}
public void addCcAddress(String mailAddress) {
this.ccAddress.add(mailAddress);
}
public void addBccAddress(String mailAddress) {
this.bccAddress.add(mailAddress);
}
public boolean isDebug() {
return debug;
}
public void setDebug(boolean debug) {
this.debug = debug;
}
public List<String> getFilePaths() {
return filePaths;
}
public void setFilePaths(List<String> filePaths) {
this.filePaths = filePaths;
}
public void addAttachment(String filePath) {
this.filePaths.add(filePath);
}
}
package common;
import java.io.File;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.Address;
import javax.mail.Authenticator;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
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;
/**
* 邮件发送器
*/
public class MailSender {
//验证邮件对象
private class MyAuthenticator extends Authenticator{
String userName=null;
String password=null;
public MyAuthenticator(){
}
public MyAuthenticator(String username, String password) {
this.userName = username;
this.password = password;
}
protected PasswordAuthentication getPasswordAuthentication(){
return new PasswordAuthentication(userName, password);
}
}
/**
* 以文本格式发送邮件
* @param mailInfo 待发送的邮件的信息
*/
public static boolean sendTextMail(MailSenderInfo mailInfo) {
// 判断是否需要身份认证
MyAuthenticator authenticator = null;
Properties pro = mailInfo.getProperties();
if (mailInfo.isValidate()) {
// 如果需要身份认证,则创建一个密码验证器
authenticator = (new MailSender()).new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());
}
// 根据邮件会话属性和密码验证器构造一个发送邮件的session
Session sendMailSession = Session.getDefaultInstance(pro,authenticator);
//是否打印邮件会话调试信息
sendMailSession.setDebug(mailInfo.isDebug());
try {
// 根据session创建一个邮件消息
Message mailMessage = new MimeMessage(sendMailSession);
// 创建邮件发送者地址
Address from = new InternetAddress(mailInfo.getFromAddress());
// 设置邮件消息的发送者
mailMessage.setFrom(from);
// 创建邮件的接收者地址,并设置到邮件消息中
//Address to = new InternetAddress(mailInfo.getToAddress());
Address[] tos = getAddress(mailInfo.getToAddress());
//mailMessage.setRecipient(Message.RecipientType.TO,to);//设置单个收件人
mailMessage.setRecipients(Message.RecipientType.TO,tos);//设置多个收件人
//创建邮件的抄送者地址,并设置到邮件消息中
Address[] ccs = getAddress(mailInfo.getCcAddress());
mailMessage.setRecipients(Message.RecipientType.CC,ccs);
//创建邮件的暗送者地址,并设置到邮件消息中
Address[] bccs = getAddress(mailInfo.getBccAddress());
mailMessage.setRecipients(Message.RecipientType.BCC,bccs);
// 设置邮件消息的主题
mailMessage.setSubject(mailInfo.getSubject());
// 设置邮件消息发送的时间
mailMessage.setSentDate(new Date());
// 设置邮件消息的主要内容
//String mailContent = mailInfo.getContent();
//mailMessage.setText(mailContent);
// 向multipart对象中添加邮件的各个部分内容,包括文本内容和附件
Multipart mainPart = new MimeMultipart();
//设置邮件的文本内容
BodyPart contentPart = new MimeBodyPart();
contentPart.setText(mailInfo.getContent());
mainPart.addBodyPart(contentPart);
// 添加附件
if(!addFileAffix(mailMessage,mainPart,mailInfo.getFilePaths())){
System.out.println("邮件发送失败!");
return false;
}
//将multipart对象放到message中
mailMessage.setContent(mainPart);
// 发送邮件
Transport.send(mailMessage);
return true;
} catch (MessagingException ex) {
ex.printStackTrace();
}
return false;
}
/**
* 以HTML格式发送邮件
* @param mailInfo 待发送的邮件信息
*/
public static boolean sendHtmlMail(MailSenderInfo mailInfo){
// 判断是否需要身份认证
MyAuthenticator authenticator = null;
Properties pro = mailInfo.getProperties();
//如果需要身份认证,则创建一个密码验证器
if (mailInfo.isValidate()) {
authenticator =(new MailSender()).new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());
}
// 根据邮件会话属性和密码验证器构造一个发送邮件的session
Session sendMailSession = Session.getDefaultInstance(pro,authenticator);
//是否打印邮件会话调试信息
sendMailSession.setDebug(mailInfo.isDebug());
try {
// 根据session创建一个邮件消息
Message mailMessage = new MimeMessage(sendMailSession);
// 创建邮件发送者地址
Address from = new InternetAddress(mailInfo.getFromAddress());
// 设置邮件消息的发送者
mailMessage.setFrom(from);
// 创建邮件的接收者地址,并设置到邮件消息中
Address[] tos = getAddress(mailInfo.getToAddress());
// Message.RecipientType.TO属性表示接收者的类型为TO
//mailMessage.setRecipient(Message.RecipientType.TO,to);
mailMessage.setRecipients(Message.RecipientType.TO,tos);
//创建邮件的抄送者地址,并设置到邮件消息中
Address[] ccs = getAddress(mailInfo.getCcAddress());
mailMessage.setRecipients(Message.RecipientType.CC,ccs);
//创建邮件的暗送者地址,并设置到邮件消息中
Address[] bccs = getAddress(mailInfo.getBccAddress());
mailMessage.setRecipients(Message.RecipientType.BCC,bccs);
// 设置邮件消息的主题
mailMessage.setSubject(mailInfo.getSubject());
// 设置邮件消息发送的时间
mailMessage.setSentDate(new Date());
// MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象
Multipart mainPart = new MimeMultipart();
// 创建一个包含HTML内容的MimeBodyPart
BodyPart html = new MimeBodyPart();
// 设置HTML内容
html.setContent(mailInfo.getContent(), "text/html; charset=utf-8");
mainPart.addBodyPart(html);
// 将MiniMultipart对象设置为邮件内容
mailMessage.setContent(mainPart);
// 添加附件
if(!addFileAffix(mailMessage,mainPart,mailInfo.getFilePaths())){
System.out.println("邮件发送失败!");
return false;
}
// 发送邮件
Transport.send(mailMessage);
return true;
} catch (Exception ex) {
ex.printStackTrace();
}
return false;
}
/**
* 创建邮件的接收者地址
* @author sd(chenfang)
* @returnType Address[] 收件人邮箱地址
* @param toAddress 收件人邮箱地址
* @throws Exception
*/
private static Address[] getAddress(List<String> toAddress){
List<Address> to = new ArrayList<Address>();
try {
for (int i=0; toAddress !=null && i<toAddress.size();i++) {
String toMail = toAddress.get(i);//获取收件人邮箱地址
if(toMail !=null && !"".equals(toMail)){
to.add(new InternetAddress(toMail));//创建接收者地址
}
}
} catch (AddressException e) {
e.printStackTrace();
}finally{
return (Address[])to.toArray(new Address[to.size()]);
}
}
/**
* 增加发送附件
* @param filenames 附件绝对路径集
* @return
*/
private static boolean addFileAffix(Message mailMessage,Multipart mainPart,List<String> filenames) {
boolean flavg=true;
for (int i = 0; filenames !=null && i < filenames.size(); i ++) {
String filename=filenames.get(i);
if(filename != null && !"".equals(filename)){
flavg = addFileAffix(mailMessage,mainPart,filename);
if(!flavg){break;}
}
}
return flavg;
}
/**
* 增加发送附件
* @param filename 附件绝对路径
* @return
*/
private static boolean addFileAffix(Message mailMessage,Multipart mainPart,String filePath) {
System.out.println("增加邮件附件:" + filePath);
try {
//添加附件
BodyPart messageBodyPart = new MimeBodyPart();
File file = new File(filePath);
if(file !=null && file.length() > MailSenderInfo.fileMaxSize){
System.err.println("邮件附件名字为" + file.getName() + "的文件大小超出允许容量范围[最大附件文件大小为"+ Constant.MAIL_FILE_SIZE +"B]");
return false;
}else if(file !=null){
DataSource source = new FileDataSource(file);
//添加附件的内容
messageBodyPart.setDataHandler(new DataHandler(source));
//设置附件的名字(可以防止邮件自动打开文件)
String filename=file.getName();
//附件名字转码
//第一种方式 BASE64Encoder encode 转码
//这里很重要,通过下面的Base64编码的转换可以保证你的中文附件标题名在发送时不会变成乱码
//sun.misc.BASE64Encoder enc = new sun.misc.BASE64Encoder();
//messageBodyPart.setFileName("=?GBK?B?"+enc.encode(filename.getBytes())+"?=");
//第二中方式 MimeUtility encodeText 转码
messageBodyPart.setFileName(MimeUtility.encodeText(filename));
//添加附件
mainPart.addBodyPart(messageBodyPart);
//将multipart对象放到message中
mailMessage.setContent(mainPart, "file");
//保存邮件
// message.saveChanges();
}
} catch (Exception e) {
System.err.println("增加邮件附件:" + filePath + "发生错误!" + e);
return false;
}
System.out.println("增加邮件附件成功!" );
return true;
}
/**
* 群发邮件信息[收件人多个] 以HTML格式发送
* @author sd(chenfang)
* @dateTime 2012-7-10上午11:13:14
* @returnType void
* @param toMail -收件人地址[至少一个,否则发送失败抛异常]
* @param ccMail -抄送人地址
* @param bccMail -暗送人地址
* @param subject -邮件主题
* @param content -邮件内容
* @param filePaths -邮件附件
*/
public static void batchSendMails(List<String> toMail,List<String> ccMail,List<String> bccMail,String subject,String content,List<String> filePaths)throws Exception{
try{
MailSenderInfo mail = new MailSenderInfo();
mail.setMailServerHost("smtp.163.com"); // 邮件服务器地址
mail.setUserName("ichenfang163@hotmail.com"); // 用户名
mail.setPassword("**********"); // 密码
mail.setFromAddress(ichenfang163@hotmail.com); // 发件人邮箱
/**设置收件人邮箱**/
mail.setToAddress(toMail);
/**设置抄送人邮箱**/
mail.setCcAddress(ccMail);
/**设置暗送人邮箱**/
mail.setBccAddress(bccMail);
/**邮件主题**/
mail.setSubject(subject);
/**邮件内容**/
mail.setContent(content);
/**设置邮件附件**/
mail.setFilePaths(filePaths);
MailSender.sendHtmlMail(mail);//发送HTML
}catch (Exception e) {
e.printStackTrace();
throw new Exception("Exception:"+e.getMessage());
}
}
public static void main(String[] args){
//这个类主要是设置邮件
MailSenderInfo mailInfo = new MailSenderInfo();
mailInfo.setMailServerHost("smtp.163.com"); //主机
//mailInfo.setMailServerPort("25"); //端口
mailInfo.setValidate(true); //登陆是否验证
mailInfo.setUserName(“ichenfang163@hotmail.com”); //用户名
mailInfo.setPassword(“*********”);//密码
mailInfo.setFromAddress(“”); //发件人邮箱
mailInfo.addToAddress("ichenfang163@163.com");//收件人邮箱1
mailInfo.addToAddress("ichenfang163@126.com");//收件人邮箱2
mailInfo.addCcAddress("tage_cf@hotmail.com");//抄送人邮箱1
mailInfo.addCcAddress("sunnyboyfang@hotmail.com");//抄送人邮箱2
mailInfo.addBccAddress("ichenfang163@hotmail.com");//暗送人邮箱1
mailInfo.addBccAddress("sunsideboy@hotmail.com");//暗送人邮箱2
mailInfo.setSubject("设置邮箱主题"); //邮件主题
mailInfo.setContent("<b>设置邮箱内容</b> <br> http://www.baidu.com");//内容
//mailInfo.addAttachment("C:/Users/sd/Desktop/工具.xlsx"); //附件1
//mailInfo.addAttachment("C:/Users/sd/Desktop/带附件的邮件发送.doc"); //附件2
mailInfo.setFilePaths(null);
System.out.println("邮件发送开始!"+(new Date().toLocaleString()));
//这个类主要来发送邮件
//MailSender sms = new MailSender();
// System.out.println("邮件发送成功是否!"+MailSender.sendTextMail(mailInfo));//发送文体格式
System.out.println("邮件发送成功是否!"+MailSender.sendHtmlMail(mailInfo));//发送html格式
System.out.println("邮件发送结束!"+(new Date().toLocaleString()));
}
}
本文深入探讨了音视频直播流媒体领域的关键技术,包括流媒体协议、WebRTC直播视频会议、流媒体直播转发服务器、P2P点对点直播等,提供了全面的技术解析和应用场景分析。
1万+





