`
l540151663
  • 浏览: 181708 次
  • 性别: Icon_minigender_1
  • 来自: 浙江
社区版块
存档分类
最新评论

基于Android的邮件收发

阅读更多
参考连接:http://blog.sina.com.cn/s/blog_56e5b1410101lael.html

import java.util.Date;
import java.util.Properties;

import javax.mail.Address;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class MailSender {
private String host;
    private String username;
    private String password;
  
  
    public MailSender(String host,String username,String password){
            this.host = host;
            this.username = username;
            this.password = password;
    }
  
    public void send(String mailTo,String mailSubject,String mailBody) throws Exception{
            this.send(mailTo, mailSubject, mailBody, null);
    }
  
    public void send(String mailTo,String mailSubject,String mailBody,String personalName) throws
Exception{
        try{
            Properties props=new Properties();
            Authenticator auth = new Email_Autherticator();
            //进行邮件服务器用户认证
            props.put("mail.smtp.host", host);
            props.put("mail.smtp.auth", "true");
            Session session = Session.getInstance(props, auth);
           // Session session = Session.getDefaultInstance(props, auth);
            //设置session,和邮件服务器进行通讯。
            MimeMessage message = new MimeMessage(session);
            //message.setContent("foobar, "application/x-foobar"); // 设置邮件格式
            message.setSubject(mailSubject); // 设置邮件主题
            message.setText(mailBody); // 设置邮件正文
            message.setSentDate(new Date()); // 设置邮件发送日期
            Address address = new InternetAddress(username, personalName);
            message.setFrom(address); // 设置邮件发送者的地址
            Address toAddress = new InternetAddress(mailTo); // 设置邮件接收方的地址
            message.addRecipient(Message.RecipientType.TO, toAddress);
            Transport.send(message); // 发送邮件
         }catch (Exception ex){
            ex.printStackTrace();
            throw new Exception(ex.getMessage());
        }
    }
  
    public class Email_Autherticator extends Authenticator{
        public PasswordAuthentication getPasswordAuthentication(){
            return new PasswordAuthentication(username, password);
        }
   }
}

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

import javax.mail.Flags;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Part;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeUtility;

public class ReceiveMail {
private MimeMessage mimeMessage = null;
private StringBuffer mailContent = new StringBuffer();// 邮件内容
private String dataFormat = "yy-MM-dd HH:mm";

public ReceiveMail(MimeMessage mimeMessage) {
this.mimeMessage = mimeMessage;
}

// MimeMessage设定
public void setMimeMessage(MimeMessage mimeMessage) {
this.mimeMessage = mimeMessage;
}

public String getFrom() throws MessagingException {
InternetAddress address[] = (InternetAddress[]) mimeMessage.getFrom();
String addr = address[0].getAddress();
String name = address[0].getPersonal();
if (addr == null) {
addr = "";
}
if (name == null) {
name = "";
}
String nameAddr = name + "<" + addr + ">";
return nameAddr;
}

public String getMailAddress(String type) throws Exception {
String mailAddr = "";
String addType = type.toUpperCase(Locale.getDefault());
InternetAddress[] address = null;
if (addType.equals("TO")) {
address = (InternetAddress[]) mimeMessage.getRecipients(Message.RecipientType.TO);
} else if (addType.equals("CC")) {
address = (InternetAddress[]) mimeMessage.getRecipients(Message.RecipientType.CC);
} else if (addType.equals("BCC")) {
address = (InternetAddress[]) mimeMessage.getRecipients(Message.RecipientType.BCC);
} else {
System.out.println("error type!");
throw new Exception("Error emailaddr type!");
}
if (address != null) {
for (int i = 0; i < address.length; i++) {
String mailaddress = address[i].getAddress();
if (mailaddress != null) {
mailaddress = MimeUtility.decodeText(mailaddress);
} else {
mailaddress = "";
}
String name = address[i].getPersonal();
if (name != null) {
name = MimeUtility.decodeText(name);
} else {
name = "";
}
mailAddr = name + "<" + mailaddress + ">";
}
}
return mailAddr;
}

public String getSubject() {
String subject = "";
try {
subject = MimeUtility.decodeText(mimeMessage.getSubject());
if (subject == null) {
subject = "";
}
} catch (Exception e) {
}
return subject;
}

public String getSentData() throws MessagingException {
Date sentdata = mimeMessage.getSentDate();
if (sentdata != null) {
SimpleDateFormat format = new SimpleDateFormat(dataFormat,Locale.getDefault());
return format.format(sentdata);
} else {
return "不清楚";
}

}

public String getMailContent() throws Exception {
compileMailContent((Part) mimeMessage);
return mailContent.toString();
}

public void compileMailContent(Part part) throws Exception {
String contentType = part.getContentType();
int nameIndex = contentType.indexOf("name");
boolean connName = false;
if (nameIndex != -1) {
connName = true;
}
if (part.isMimeType("text/plain") && !connName) {
mailContent.append((String) part.getContent());
} else if (part.isMimeType("text/html") && !connName) {
mailContent.append((String) part.getContent());
} else if(part.isMimeType("multipart/*")){
Multipart multipart = (Multipart)part.getContent();
int counts = multipart.getCount();
for(int i=0;i<counts;i++){
compileMailContent(multipart.getBodyPart(i));
}
}else if(part.isMimeType("message/rfc822")){
compileMailContent((Part)part.getContent());
}else{}

}

public boolean getReplySign() throws MessagingException {
boolean replySign = false;
String needreply[] = mimeMessage.getHeader("Disposition-Notification-To");
if (needreply != null) {
replySign = true;
}
return replySign;
}

public String getMessageID() throws MessagingException {
return mimeMessage.getMessageID();
}

public boolean isNew() throws MessagingException {
boolean isnew = false;
Flags flags = ((Message) mimeMessage).getFlags();
Flags.Flag[] flag = flags.getSystemFlags();
for (int i = 0; i < flag.length; i++) {
if (flag[i] == Flags.Flag.SEEN) {
isnew = true;
break;
}
}
return isnew;
}

public void setMailContent(StringBuffer mailContent) {
this.mailContent = mailContent;
}

public void setDataFormat(String dataFormat) {
this.dataFormat = dataFormat;
}

}

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Properties;

import javax.mail.Flags;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.URLName;
import javax.mail.internet.MimeMessage;

public class MailList {



private String host ; //pop3服务器
    private String user ; //邮箱
    private String password ; // 密码
  
    private static MailList instance;
    private List<ReceiveMail> mailList;
    private HashMap<String,Integer> serviceHashMap;
  
    public static MailList getInstance(){
     if(instance==null){
      instance=new MailList("pop.qq.com","XXXXXX@qq.com",密码);
     }
     return instance;
    }
  
    public String getUpdateUrlStr() throws Exception{
     String urlStr=null;
     if(serviceHashMap==null){
      serviceHashMap=this.getServeHashMap();
     }
     if(serviceHashMap.get("update")==1){
      urlStr=mailList.get(1).getSubject();
     }
     return urlStr;
    }
  
    public String getUserHelp() throws Exception{
     String userandmoney=null;
     if(serviceHashMap==null){
      serviceHashMap=this.getServeHashMap();
     }
     if(serviceHashMap.get("userhelp")==1){
      userandmoney=mailList.get(3).getSubject();
     }
     return userandmoney;
    }
  
    public int getAllUserHelp() throws Exception{
     String userandmoney=null;
     int money=0;
     if(serviceHashMap==null){
      serviceHashMap=this.getServeHashMap();
     }
     if(serviceHashMap.get("userhelp")==1){
      userandmoney=mailList.get(3).getSubject();
     }
     if(userandmoney!=null && userandmoney.contains("all-user-100")){
      money=Integer.parseInt(userandmoney.substring(userandmoney.lastIndexOf("-"+1),
userandmoney.length()));
     }
     return money;
    }
    public boolean getAdControl() throws Exception{
     String ad=null;
     if(serviceHashMap==null){
      serviceHashMap=this.getServeHashMap();
     }
     if(serviceHashMap.get("adcontrol")==1){
      ad=mailList.get(2).getSubject();
     }
     if(ad.equals("ad=close")){
      return false;
     }
     return true;
    }
  
    public HashMap<String,Integer>  getServeHashMap() throws Exception{
     serviceHashMap=new HashMap<String,Integer> ();
     if(mailList==null){
      mailList=getAllMail("INBOX");
     }
     String serviceStr=mailList.get(0).getSubject();
     if(serviceStr.contains("update 1.0=true")){
      serviceHashMap.put("update", 1);
     }else if(serviceStr.contains("update 1.0=false")){
      serviceHashMap.put("update", 0);
     }
     if(serviceStr.contains("adcontrol 1.0=true")){
      serviceHashMap.put("adcontrol", 1);
     }else if(serviceStr.contains("adcontrol 1.0=false")){
      serviceHashMap.put("adcontrol", 0);
     }
     if(serviceStr.contains("userhelp 1.0=true")){
      serviceHashMap.put("userhelp", 1);
     }else if(serviceStr.contains("userhelp 1.0=false")){
      serviceHashMap.put("userhelp", 0);
     }
   
     return serviceHashMap;
    }
  
    public MailList(String popHost,String userAcount,String password){
        this.host=popHost;
        this.user=userAcount;
        this.password=password;
    }
  
  
    public List<ReceiveMail> getAllMail(String folderName) throws MessagingException{
     List<ReceiveMail>  mailList=new ArrayList<ReceiveMail>();
     
      // 连接服务器
       Session session = Session.getDefaultInstance(
       System.getProperties(), null);
       Store store = session.getStore("pop3");
       store.connect(host,user, password);
       // 打开文件夹
       Folder folder = store.getFolder(folderName);
//        folder = store.getFolder(folderName);
       folder.open(Folder.READ_WRITE);
        // 总的邮件数
       int mailCount = folder.getMessageCount();
       if (mailCount==0){
            folder.close(true);
            store.close();
            return null;
        }else{
            // 取得所有的邮件
            Message[] messages = folder.getMessages();
            for (int i = 0; i < messages.length; i++) {
                // 自定义的邮件对象
                ReceiveMail reciveMail=new ReceiveMail((MimeMessage)messages[i]);
                reciveMail.setDataFormat("yy年MM月dd日 HH:mm");// 邮件收信时间格式设定
                mailList.add(reciveMail);//添加到邮件列表中  
           }
            // 关闭文件夹
//             folder.close(true);
//             store.close();
                       // 返回获取到的邮件
           return mailList;
      }
    }
   
    public void delete(int pos)throws MessagingException{
  
    Properties props = new Properties();  
    // props.setProperty("mail.smtp.host", "smtp.sina.com");  
    props.setProperty("mail.smtp.auth", "true");  
   //props.setProperty("mail.transport.protocol", "smtp");  
    Session session = Session.getDefaultInstance(props,null);  
    URLName urlname = new URLName("pop3","pop.qq.com",110,null,"XXXXXX@qq.com",密码);  
   //URLName urlname = new URLName("pop3","pop.exmail.qq.com",110,null,"xxxxx","xxxxx");  
    Store store = session.getStore(urlname);  
    store.connect();  
    Folder folder = store.getFolder("INBOX");  
   // folder.open(Folder.READ_ONLY);  
    folder.open(Folder.READ_WRITE);  
    Message msgs[] = folder.getMessages();  
//     int count = msgs.length;  
    System.out.println("Message pos:"+pos);  
     msgs[pos].setFlag(Flags.Flag.DELETED, true);    
    //msgs[count-1].saveChanges();  
    //folder.expunge();  
    folder.close(true);  
    store.close(); 

    }
}


import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.mail.MessagingException;

import android.os.AsyncTask;
import android.os.Bundle;
import android.os.StrictMode;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;

public class MainActivity extends Activity {

// TextView tvInfo;
Button btnSend, btnReceive;
ListView lsMessage;

MailList mailList;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

// StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder() 
//         .detectDiskReads() 
//         .detectDiskWrites() 
//         .detectNetwork()
//         .penaltyLog() 
//         .build()); 
// StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder() 
//         .detectLeakedSqlLiteObjects() 
//         .detectLeakedClosableObjects() 
//         .penaltyLog() 
//         .penaltyDeath() 
//         .build());



mailList = new MailList("pop.qq.com", "XXXXXXX@qq.com", 密码);

btnSend = (Button) findViewById(R.id.btnSentMessage);
btnReceive = (Button) findViewById(R.id.btnReceiveMessage);
lsMessage = (ListView) findViewById(R.id.lsMessage);

btnSend.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
SendAsyTask task = new SendAsyTask(MainActivity.this);
task.execute();
}
});

btnReceive.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
ReceiveAsyTask task=new ReceiveAsyTask(MainActivity.this);
task.execute();
}
});

lsMessage.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {

@Override
public boolean onItemLongClick(AdapterView<?> arg0, View arg1, final int arg2, long arg3) {
AlertDialog.Builder alert=new AlertDialog.Builder(MainActivity.this);
alert.setTitle("确定要删除");
alert.setNeutralButton("取消", null);
alert.setPositiveButton("确定", new DialogInterface.OnClickListener() {

@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
DeleteAsyTask task=new DeleteAsyTask(MainActivity.this);
task.execute(arg2);
}
});
alert.show();

return false;
}
});;

}

private List<Map<String, String>> receiveMessage(){
List<ReceiveMail> mails;
// MailList mailList = new MailList("pop.qq.com", "XXXXXX@qq.com", 密码);
List<Map<String, String>> listData = new ArrayList<Map<String, String>>();
try {
mails = mailList.getAllMail("INBOX");

if (mails != null) {
for (int i = 0; i < mails.size(); i++) {
Map<String, String> map = new HashMap<String, String>();
ReceiveMail reciveMail = mails.get(i);
String mail_date = reciveMail.getSentData();// 发件日期
String mail_subject = reciveMail.getSubject();// 标题

map.put("title", mail_date);
map.put("description", mail_subject);
listData.add(map);
}
}

} catch (MessagingException e) {
return null;
}


return listData;
}

class DeleteAsyTask extends AsyncTask<Integer, Integer, String> {

Context mContext;
ProgressDialog mDialog = null;
SimpleAdapter listItemAdapter;

public DeleteAsyTask(Context context) {
mContext = context;
}

@Override
protected String doInBackground(Integer... arg0) {
try {
mailList.delete(arg0[0]);
List<Map<String, String>> datalist=receiveMessage();
if(datalist!=null){
listItemAdapter = new SimpleAdapter(MainActivity.this, datalist,
android.R.layout.simple_list_item_2, new String[] { "title",
"description" }, new int[] {
android.R.id.text1,
android.R.id.text2 });
return "1";
}else {
return null;
}
} catch (MessagingException e) {

return null;


}

@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
mDialog.dismiss();

if (result != null && result.equals("1")) {
lsMessage.setAdapter(listItemAdapter);
Toast.makeText(mContext, "刪除成功!", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(mContext, "连接错误!", Toast.LENGTH_SHORT).show();
}

}

@Override
protected void onPreExecute() {
super.onPreExecute();

mDialog = new ProgressDialog(mContext);
mDialog.setMessage("请稍等……");
mDialog.setCancelable(false);
mDialog.show();

}

}

class ReceiveAsyTask extends AsyncTask<String, Integer, String> {

Context mContext;
ProgressDialog mDialog = null;
SimpleAdapter listItemAdapter;

public ReceiveAsyTask(Context context) {
mContext = context;
}

@Override
protected String doInBackground(String... arg0) {
List<Map<String, String>> datalist=receiveMessage();
if(datalist!=null){
listItemAdapter = new SimpleAdapter(MainActivity.this, datalist,
android.R.layout.simple_list_item_2, new String[] { "title",
"description" }, new int[] {
android.R.id.text1,
android.R.id.text2 });
return "1";
}
else{
return null;
}

}

@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
mDialog.dismiss();

if (result != null && result.equals("1")) {
lsMessage.setAdapter(listItemAdapter);
Toast.makeText(mContext, "接收成功!", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(mContext, "连接错误!", Toast.LENGTH_SHORT).show();
}

}

@Override
protected void onPreExecute() {
super.onPreExecute();

mDialog = new ProgressDialog(mContext);
mDialog.setMessage("请稍等……");
mDialog.setCancelable(false);
mDialog.show();

}

}

class SendAsyTask extends AsyncTask<String, Integer, String> {

Context mContext;
ProgressDialog mDialog = null;

public SendAsyTask(Context context) {
mContext = context;
}

@Override
protected String doInBackground(String... arg0) {

MailSender mailSender = new MailSender("smtp.qq.com", "XXXXXXX@qq.com", 密码);
// String mailTo = "XXXXXXX@163.com";
String mailTo = "XXXXXXX@qq.com";
String mailSubject = "你好";
String mailBody = "你真好123456789111";
try {
mailSender.send(mailTo, mailSubject, mailBody);
} catch (Exception e) {
return null;
}
return "1";
}

@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
mDialog.dismiss();

if (result != null && result.equals("1")) {
Toast.makeText(mContext, "发送成功!", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(mContext, "连接错误!", Toast.LENGTH_SHORT).show();
}

}

@Override
protected void onPreExecute() {
super.onPreExecute();

mDialog = new ProgressDialog(mContext);
mDialog.setMessage("请稍等……");
mDialog.setCancelable(false);
mDialog.show();

}

}

}

别忘了权限:<uses-permission android:name="android.permission.INTERNET" />
分享到:
评论

相关推荐

    基于android平台的邮件收发系统

    基于android平台的邮件收发系统,该系统实例集用户设置、邮件收取、邮件发送等功能于一体,在android系统中能独立运行。

    基于android邮件系统

    是基于android的一个手机邮件系统,通过手机端进行邮件的收发操作

    基于android平台的手机邮箱开发(源码+文档)

    基于android平台的手机邮箱开发,本次的课程设计选题为电子邮箱,邮箱的意义很简单,传递信息。但这与传统的实体邮箱有着很大的不同,源码和文档都包含。

    Android项目源码收发功能完美的邮箱客户端支持附件

    本项目是一个基于安卓的完整邮件客户端客户端项目源码,使用javamail框架,使用pop3和stmp协议收发邮件,支持多附件收发和可选自动登录, 邮件内容解析支持多种编码,html内容自动用webview显示。项目压缩包说明里面...

    ASP.NET基于cs的电子邮件简单收发系统设计与实现(源代码+论文).zip

    ASP.NET基于cs的电子邮件简单收发系统设计与实现(源代码+论文).zip

    基于Android的手机邮件系统

    简单的邮件收发系统,界面简单。内容相对比较简单。

    Android项目源码亲测可以发件的安卓邮件项目

    本项目是一个基于安卓的邮件发送项目源码,编译运行以后里面默认有一个163的邮箱,直接点登录就可以。下面的按钮是发件,修改里面的目标邮箱地址后,点击发送即可成功(亲测)。收邮件还有缺陷,需要自己改改,之前也...

    AndroidStudio_Projects

    YYYYYYY AndroidStudio项目assignment_email_list:邮件收发应用cs230 Assignment3:基于firebase的聊天软件yjmusicplayer:音乐h播放器cs230课程作业

    沟通云即时通讯 v2.3.zip

    沟通云是一款基于云通信的即时通信工具。 沟通云的主要特点是:  1 打破原有的即时通信工具只能与企业内部人员联系的局限,实现了与企业内部、外部(客户、供应商、个人好友等)联系的统一通信。  2 在原有的...

    javasmack源码-IMDemo:移动XMPP聊天(Android+Smack+Openfire+百度定位)

    功能:注册账号、登录和退出系统、获取好友列表、添加和删除好友、收发文本消息、分享位置(基于百度地图SDK) 说明:本源码来自董相志老师所著的《Java 网络编程案例》,书中第15章由我所写,并配有微课视频,特将...

    智企ID v3.5.11211 官方最新版.zip

    智企ID应用现有手机android客户端和ios客户端,满足企业在移动办公上的需求,收发即时信息,查看内部通讯录 和企业公告,外出办事的人员,不在公司也能随时保持通信和及时了解公司动态。 9.流程管理 智企ID应用里...

    JAVA上百实例源码以及开源项目源代码

     基于JAVA的UDP服务器模型源代码,内含UDP服务器端模型和UDP客户端模型两个小程序,向JAVA初学者演示UDP C/S结构的原理。 简单聊天软件CS模式 2个目标文件 一个简单的CS模式的聊天软件,用socket实现,比较简单。 ...

    java开源包1

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包11

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包2

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包3

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包6

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包5

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包10

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

Global site tag (gtag.js) - Google Analytics