android邮件发送几种方式

android中发送邮件我大概发现了3种,代码如下

package src.icetest;  

import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.HtmlEmail;  

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;  

public class IcetestActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Log.i("IcetestActivity", "start ice test step 1");
        // sendMailIntent();
        //sendMailByApache();
        sendMailByJavaMail();
    }  

    // you need config the mail app in your android moble first,and the mail will send by the mail app. and there are one big bug:
    //you can‘t send the mail Silently and you need to click the send button
    public int sendMailByIntent() {
        String[] reciver = new String[] { "[email protected]" };
        String[] mySbuject = new String[] { "test" };
        String myCc = "cc";
        String mybody = "测试Email Intent";
        Intent myIntent = new Intent(android.content.Intent.ACTION_SEND);
        myIntent.setType("plain/text");
        myIntent.putExtra(android.content.Intent.EXTRA_EMAIL, reciver);
        myIntent.putExtra(android.content.Intent.EXTRA_CC, myCc);
        myIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, mySbuject);
        myIntent.putExtra(android.content.Intent.EXTRA_TEXT, mybody);
        startActivity(Intent.createChooser(myIntent, "mail test"));  

        return 1;  

    }
   /*this method can‘t be used in android mobile successful,but it can run normally in PC.
    Because it will cause the java.lang.NoClassDefFoundError: javax.activation.DataHandler error
    May be there are some way to solove it ......there are always javax package not found in android virtual mobile.
    By the way ,the method use Apache mail jar
    */
    public int sendMailByApache() {  

        try {
            HtmlEmail email = new HtmlEmail();
            // 这里是发送服务器的名字
            email.setHostName("smtp.gmail.com");
            // 编码集的设置
            email.setTLS(true);
            email.setSSL(true);  

            email.setCharset("gbk");
            // 收件人的邮箱
            email.addTo("[email protected]");
            // 发送人的邮箱
            email.setFrom("[email protected]");
            // 如果需要认证信息的话,设置认证:用户名-密码。分别为发件人在邮件服务器上的注册名称和密码
            email.setAuthentication("wcf1000", "00000");
            email.setSubject("测试Email Apache");
            // 要发送的信息
            email.setMsg("测试Email Apache");
            // 发送
            email.send();
        } catch (EmailException e) {
            // TODO Auto-generated catch block
            Log.i("IcetestActivity", e.getMessage());
        }  

        return 1;
    }
/*
 * this method use javamail for android ,it is a good jar,
 * you can see the demo in http://www.jondev.net/articles/Sending_Emails_without_User_Intervention_(no_Intents)_in_Android
 * and you also need three jars ,which I offered in attachement
 *
 * */
    public int sendMailByJavaMail() {
        Mail m = new Mail("[email protected]", "XXXXX");
        m.set_debuggable(true);
        String[] toArr = {"[email protected]"};
        m.set_to(toArr);
        m.set_from("[email protected]");
        m.set_subject("This is an email sent using icetest from an Android device");
        m.setBody("Email body. test by Java Mail");
        try {
            //m.addAttachment("/sdcard/filelocation");
            if(m.send()) {
            Log.i("IcetestActivity","Email was sent successfully.");  

            } else {
                Log.i("IcetestActivity","Email was sent failed.");
            }
        } catch (Exception e) {
            // Toast.makeText(MailApp.this,
            // "There was a problem sending the email.",
            // Toast.LENGTH_LONG).show();
            Log.e("MailApp", "Could not send email", e);
        }  

        return 1;
    }
}  

第一种方法是调用了系统的mail app,你首先要配置系统的mail app,但是这个方法的最大问题是,你运行这个方法后

他并不会默认的发送邮件,而是弹出mail的app界面,你需要手动的点击发送,如图

第二种,是调用了apache的common库,在pc上可以正常运行,但是在android虚拟机中会报错java.lang.NoClassDefFoundError: javax.activation.DataHandler error

javax包无法找到,我看了下这个问题还是比较普遍的,大家普遍表示虚拟机是被阉割的版本,javax好像存在不全,这个实际上就无法运行

第三种,实际是javamail有人做了移植,专门为android做了开发,这下就比较好了,网上的demo代码也比较到位,只有一个问题,就是要自己添加一个mail.java,而且对stmp要手动添加。

其实理论上还应该有一种,自己实现smtp服务器,全程采用socket编程,直接与目标服务器交流,这个win下面我写过,但是android下就算了,而且长期来讲面临着smtp服务器以后会被进行方向查询,以提高安全性。

http://wcf1987.iteye.com/blog/1292509

时间: 2024-10-28 04:38:06

android邮件发送几种方式的相关文章

android 定位的几种方式介绍

[地理位置] android 定位的几种方式介绍 开发中对于地图及地理位置的定位是我们经常要用地,地图功能的使用使得我们应用功能更加完善,下面 www.androidkaifa.com 总结了一下网络中现有对于介绍android定位的几种方式,希望对大家有帮助: android 定位一般有四种方法,这四种方式分别是:GPS定位,WIFI定准,基站定位,AGPS定位, (1) Android GPS:需要GPS硬件支持,直接和卫星交互来获取当前经纬度,这种方式需要手机支持GPS模块(现在大部分的智

android 定位的四种方式

[原文] 开发中对于地图及地理位置的定位是我们经常要用地,地图功能的使用使得我们应用功能更加完善,下面总结了一下网络中现有对于介绍android定位的4种方式,希望对大家有帮助: android 定位一般有四种方法,这四种方式分别是:GPS定位,WIFI定准,基站定位,AGPS定位,                             (1)Android GPS:需要GPS硬件支持,直接和卫星交互来获取当前经纬度,这种方式需要手机支持GPS模块(现在大部分的智能机应该都有了).通过GPS方

[Android] 数据存储五种方式使用与总结

1.概述 Android提供了5种方式来让用户保存持久化应用程序数据.根据自己的需求来做选择,比如数据是否是应用程序私有的,是否能被其他程序访问,需要多少数据存储空间等,分别是: ① 使用SharedPreferences存储数据 ② 文件存储数据 ③ SQLite数据库存储数据 ④ 使用ContentProvider存储数据 ⑤ 网络存储数据 Android提供了一种方式来暴露你的数据(甚至是私有数据)给其他应用程序 - ContentProvider.它是一个可选组件,可公开读写你应用程序数

Android 数据存储五种方式

1.概述 Android提供了5种方式来让用户保存持久化应用程序数据.根据自己的需求来做选择,比如数据是否是应用程序私有的,是否能被其他程序访问,需要多少数据存储空间等,分别是: ① 使用SharedPreferences存储数据 ② 文件存储数据 ③ SQLite数据库存储数据 ④ 使用ContentProvider存储数据 ⑤ 网络存储数据 Android提供了一种方式来暴露你的数据(甚至是私有数据)给其他应用程序 - ContentProvider.它是一个可选组件,可公开读写你应用程序数

[Android Pro] Android学习——在线查看android源代码的3种方式

原文:http://blog.csdn.net/chuekup/article/details/8067075 1. https://github.com/android 2. http://grepcode.com/project/repository.grepcode.com/java/ext/com.google.android/android/ 上面2种都是通过第三方网站直接访问,这里主要说说下面这种方法: 3. 一个chrome内核浏览器插件:Android SDK Reference

Android数据存储五种方式总结

本文介绍Android平台进行数据存储的五大方式,分别如下: 1 使用SharedPreferences存储数据     2 文件存储数据       3 SQLite数据库存储数据 4 使用ContentProvider存储数据 5 网络存储数据 下面详细讲解这五种方式的特点 第一种: 使用SharedPreferences存储数据     适用范围:保存少量的数据,且这些数据的格式非常简单:字符串型.基本类型的值.比如应用程序的各种配置信息(如是否打开音效.是否使用震动效果.小游戏的玩家积分

(七)android开发中两种方式监听短信的原理和实现

一.监听短信的两种方式的简介 Android程序开发中,有两种方式监听短信内容:一.接收系统的短信广播:二.应用观察者模式,监听短信数据库. 第一种方式接收系统的短信广播: A.这种方式只对新收到的短消息有效,运行代码,并不会读取收件箱中已读或未读的消息,只有当收到新来的短消息时,才会执行onReceive()方法. B.并且这个广播是有序广播,如果当别的程序先读取到了这个广播,然后拦截掉了个这个广播,你将接收不到.当然我们可以通过设置priority的数值,其实有时是不管用的,现在在一些定制的

Android邮件发送详解

转载:http://flysnow.iteye.com/blog/1128354 Android中我为什么发不了邮件???我手机里明明有邮件客户端的,可我为什么不能调用它发送邮件???相信这是很多人会问的问题,手机里有Email客户端,可是偏偏在自己的应用里调用不了,抑或是不知道怎么调用,还有的是一直认为自己写对了,可是偏偏不能调用,无奈之下只能却网上找段代码粘贴上,ok,可以了..可是你知道别人的代码为什么可以?你知道调用Email是怎么工作的吗?如果你又像给多人发邮件,还想发送附件,怎么做?

Zend_Mail 邮件发送(SMTP方式)

Zend_Mail邮件发送 转载请注明出处,尊重原创:http://blog.csdn.net/a437629292/article/details/41700009 一. 邮件发送方式: 1.直接邮件服务器发送: 直接使用邮件服务器发送,也就是php程序所在服务器上本来就是邮件服务器(即配置成SMTP邮件服务器),并且发送到的对方也必须是邮件服务器,比如QQ邮箱,163邮箱等等,他们直接也是使用SMTP协议 2. 委托其他邮件服务器发送: php程序委托其他邮件服务器发送邮件(必须条件:该服务