`
yddido
  • 浏览: 11417 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

Android 发邮件

 
阅读更多
<p>由于刚学android,就接到一个任务,做个发邮件的任务,从网上一顿找啊,感觉还是这个比较好,推荐一下</p>
<p><span>
<p>在android里进行邮件客户端开发可以有两种方式:</p>
<p class="p0"><span>在邮件客户端的设计中,可以采用两种方法。</span></p>
<p class="p0"><span>l</span><span>一种是调用<span>android</span><span>系统自带的邮件服务</span></span></p>
<p class="p0"><span>优点:这种方法比较简单易用</span></p>
<p class="p0"><span>缺点:发送邮件的账号必须是<span>gmail</span><span>账号</span></span></p>
<p class="p0"><span>l</span><span>令一种方法是采用<span>javamail</span><span>功能包</span></span></p>
<p class="p0"><span>优点:可以设置邮件服务器地址,不必局限于<span>gmail</span><span>邮箱</span></span></p>
<p class="p0"><span>缺点:用法比较复杂</span></p>
<p></p>
<p>下面依次介绍这两种方式:</p>
<p><span>先看应用android自带邮件系统的关键代码</span></p>
<p><span><span><ol class="dp-j">
<li class="alt"><span><span class="comment">//建立Intent对象</span><span></span></span></li>
<li><span>Intentintent=<span class="keyword">new</span><span>Intent();</span></span></li>
<li class="alt"><span><span class="comment">//设置对象动作</span><span></span></span></li>
<li><span>intent.setAction(Intent.ACTION_SEND);</span></li>
<li class="alt"><span><span class="comment">//设置对方邮件地址</span><span></span></span></li>
<li><span>intent.putExtra(Intent.EXTRA_EMAIL,<span class="keyword">new</span><span>String[]</span></span></li>
<li class="alt"><span>{<span class="string">"abc@com.cn"</span><span>,</span><span class="string">"edf@com.cn"</span><span>});</span></span></li>
<li><span><span class="comment">//设置标题内容</span><span></span></span></li>
<li class="alt"><span>intent.putExtra(Intent.EXTRA_SUBJECT,<span class="string">"test"</span><span>);</span></span></li>
<li><span><span class="comment">//设置邮件文本内容</span><span></span></span></li>
<li class="alt"><span>intent.putExtra(Intent.EXTRA_TEXT,<span class="string">"testmail"</span><span>);</span></span></li>
<li><span>启动一个新的ACTIVITY,<span class="string">"Sendingmail..."</span><span>是在启动这个</span></span></li>
<li class="alt"><span>ACTIVITY的等待时间时所显示的文字</span></li>
<li><span>startActivity(Intent.createChooser(intent,"Sending</span></li>
<li class="alt"><span>mail..."));     </span></li>
</ol></span></span></p>
<p></p>
<p><span>只有上面的代码有可能还会出现异常,你运行的时候会提示一个错误:no application can perform this action会有这个错误提示,是由于你没有在模拟器上配置gmail邮箱,输入自己的gmail账号和密码,默认使用的是你的gmail账号发信。</span></p>
<p><span><span>
<p><span>使用javamail实现的代码</span></p>
<p><span>在android里使用javamail需要依赖3个包,activation.jar,additionnal.jar,mail.jar<br>同时还要注意一个最重要的地方那就是开启你访问互联网的权限不然你一点用没有。。。。<br></span></p>
<p><span></span><span><span>&lt;uses-permissionandroid:name=</span><span class="string">"android.permission.INTERNET"</span><span>&gt;&lt;/uses-permission&gt; </span></span></p>
<p><span><span><span>
<p><span><span><span><span>对于</span><span>JavaMail</span><span>,最基础的功能就是邮件的发送和接收,在这里,我先讲一讲邮件的发送。</span></span></span></span></p>
<p class="MsoNormal"><span><span>在写具体的程序前,先讲一些概念。</span><span>1.</span><span>邮件的发送:如果你的邮件地址是</span><span>a@host.com</span><span>,而你要用这个邮箱发送一封邮件到</span><span>to@tohost.com</span><span>,这个发送过程是怎样的呢,你以为是先连接到</span><span>tohost.com</span><span>这服务器上,然后把邮件发送出去吗?其实不然。最初,你需要连接到服务器</span><span>host.com</span><span>上,当然这个连接可能需要认证,然后是发送邮件到服务器</span><span>host.com</span><span>上,关闭连接。在</span><span>host.com</span><span>上,你所发送的邮件进入发送队列中,轮到你要发送的邮件时,</span><span>host.com</span><span>主机再联系</span><span>tohost.com</span><span>,将邮件传输到服务器</span><span>tohost.com</span><span>上。</span><span>2.</span><span>一些垃圾邮件的发送:在垃圾邮件中,可能大部分的发件人的地址都是假的,这是怎么回事呢?实际上在发送这些垃圾邮件的时候,这里的</span><span>host.com</span><span>有些特别,可能</span><span>host.com</span><span>不需要对用户进行认证,也可能发送垃圾邮件的人本来就控制着服务器</span><span>host.com</span><span>,然后控制着</span><span>host.com</span><span>向其他服务器,如</span><span>tohost.com</span><span>,发送邮件,而发送邮件的内容可以被控制,发件人的地址就可以随便填写。</span></span></p>
<p class="MsoNormal"><span><span>发送邮件主要包括</span><span>3</span><span>个部分:创建连接,创建邮件体,发送邮件</span></span></p>
<p class="MsoNormal"><span><span>JavaMail</span><span>中,是使用会话</span><span>(Session)</span><span>来管理连接的。创建一个连接,就需要创建一个会话。在会话中,有两个重要的因素,一是会话的属性,二是会话的认证。在我们使用</span><span>Hotmail</span><span>等邮件工具的时候,就要设置</span><span>”SMTP</span><span>服务器身份验证</span><span>”</span><span>,也就是这里的会话的认证。</span></span></p>
<p class="MsoNormal"><span><span></span></span></p>
<p class="MsoNormal"><span><span></span></span></p>
<p class="MsoNormal"><span><span>首先,创建一个连接属性。</span></span></p>
<p class="MsoNormal"><span>Properties props = new Properties();</span></p>
<p class="MsoNormal"><span><span>props.put("mail.smtp.host","smtp.126.com");<span></span>//</span><span>设置</span><span>smtp</span><span>的服务器地址是</span><span>smtp.126.com</span></span></p>
<p class="MsoNormal"><span><span>props.put("mail.smtp.auth","true");<span></span>//</span><span>设置</span><span>smtp</span><span>服务器要身份验证。</span></span></p>
<p class="MsoNormal"></p>
<p class="MsoNormal"><span><span></span></span></p>
<p class="MsoNormal"><span><span></span></span><span><span>在创建一个身份验证。身份验证稍微复杂一点,要创建一个</span><span>Authenticator</span><span>的子类,并重载</span><span> getPasswordAuthentication</span><span>()方法</span><span>,</span><span>代码如下:</span></span></p>
<p class="MsoNormal"><span> class PopupAuthenticator extends Authenticator {</span></p>
<p class="MsoNormal"><span><span><span> </span>public PasswordAuthentication getPasswordAuthentication() {</span></span></p>
<p class="MsoNormal"><span><span><span> </span>String username = "cqhcp"; //126</span><span>邮箱登录帐号</span></span></p>
<p class="MsoNormal"><span><span><span></span>String pwd = "12345"; //</span><span>登录密码</span></span></p>
<p class="MsoNormal"><span><span><span> </span>return new PasswordAuthentication(username, pwd);</span></span></p>
<p class="MsoNormal"><span><span><span></span>}</span></span></p>
<p class="MsoNormal"><span>}</span></p>
<p class="MsoNormal"><span><span>创建身份验证的实例</span><span>:</span></span></p>
<p class="MsoNormal"><span>PopupAuthenticator auth = new PopupAuthenticator();</span></p>
<p class="MsoNormal"><span><span></span></span></p>
<p class="MsoNormal"><span><span>创建会话</span><span>:</span><span>关于会话的创建,有两种方法,具体请参看后续的文章</span><span>,</span><span>这里只简单使用一种。</span></span></p>
<p class="MsoNormal"><span>Session session = Session.getInstance(props, auth);</span></p>
<p class="MsoNormal"><span><span></span></span></p>
<p class="MsoNormal"><span><span></span></span></p>
<p class="MsoNormal"><span><span>定义邮件地址</span><span>:</span></span></p>
<p class="MsoNormal"><span><span>//</span><span>发送人地址</span></span></p>
<p class="MsoNormal"><span>Address addressFrom = new InternetAddress("cqhcp@126.com", "George Bush");</span></p>
<p class="MsoNormal"><span><span>//</span><span>收件人地址</span></span></p>
<p class="MsoNormal"><span>Address addressTo = new InternetAddress("webmaster@javazy.com", "George Bush");</span></p>
<p class="MsoNormal"><span><span>//</span><span>抄送地址</span></span></p>
<p class="MsoNormal"><span>Address addressCopy = new InternetAddress("haocongping@gmail.com", "George Bush");</span></p>
<p class="MsoNormal"><span><span></span></span></p>
<p class="MsoNormal"><span><span></span></span></p>
<p class="MsoNormal"><span><span>创建邮件体</span><span>:</span></span></p>
<p class="MsoNormal"><span><span>message.setContent("Hello", "text/plain");//</span><span>或者使用</span><span>message.setText("Hello");</span><span>更详细的信息请参看后续文章</span><span>.</span></span></p>
<p class="MsoNormal"><span>message.setSubject("Title");</span></p>
<p class="MsoNormal"><span>message.setFrom(addressFrom);</span></p>
<p class="MsoNormal"><span>message.addRecipient(Message.RecipientType.TO,addressTo);</span></p>
<p class="MsoNormal"><span>message.addRecipient(Message.RecipientType.CC,addressCopy);</span></p>
<p class="MsoNormal"><span>message.saveChanges();</span></p>
<p class="MsoNormal"><span><span></span></span></p>
<p class="MsoNormal"><span><span></span></span></p>
<p class="MsoNormal"><span><span>发送邮件的过程</span><span>:</span></span></p>
<p class="MsoNormal"><span><span>Transport transport = session.getTransport("smtp");//</span><span>创建连接</span></span></p>
<p class="MsoNormal"><span><span>transport.connect("smtp.126.com", "cqhcp", "12345");//</span><span>连接服务器</span></span></p>
<p class="MsoNormal"><span><span>transport.send(message);//</span><span>发送信息</span></span></p>
<p class="MsoNormal"><span><span>transport.close();//</span><span>关闭连接</span></span></p>
<p class="MsoNormal"><span><span></span></span></p>
<p class="MsoNormal"><span><span></span></span></p>
<p class="MsoNormal"><span><span>整体程序的代码如下</span><span>:</span></span></p>
<p class="MsoNormal"><span>class PopupAuthenticator extends Authenticator {</span></p>
<p class="MsoNormal"><span><span><span></span>public PasswordAuthentication getPasswordAuthentication() {</span></span></p>
<p class="MsoNormal"><span><span><span></span>String username = "cqhcp"; //163</span><span>邮箱登录帐号</span></span></p>
<p class="MsoNormal"><span><span><span></span>String pwd = "12345"; //</span><span>登录密码</span></span></p>
<p class="MsoNormal"><span><span><span></span>return new PasswordAuthentication(username, pwd);</span></span></p>
<p class="MsoNormal"><span><span><span></span>}</span></span></p>
<p class="MsoNormal"><span>}</span></p>
<p class="MsoNormal"><span><span></span></span></p>
<p class="MsoNormal"><span><span></span></span></p>
<p class="MsoNormal"><span>Properties props = new Properties();</span></p>
<p class="MsoNormal"><span>props.put("mail.smtp.host","smtp.126.com");</span></p>
<p class="MsoNormal"><span>props.put("mail.smtp.auth","true");</span></p>
<p class="MsoNormal"><span>PopupAuthenticator auth = new PopupAuthenticator();</span></p>
<p class="MsoNormal"><span>Session session = Session.getInstance(props, auth);</span></p>
<p class="MsoNormal"><span>MimeMessage message = new MimeMessage(session);</span></p>
<p class="MsoNormal"><span><span></span></span></p>
<p class="MsoNormal"><span>Address addressFrom = new InternetAddress("cqhcp@126.com", "George Bush");</span></p>
<p class="MsoNormal"><span>Address addressTo = new InternetAddress("webmaster@javazy.com", "George Bush");</span></p>
<p class="MsoNormal"><span>Address addressCopy = new InternetAddress("haocongping@gmail.com", "George Bush");</span></p>
<p class="MsoNormal"><span><span></span></span></p>
<p class="MsoNormal"><span><span>message.setContent("Hello", "text/plain");//</span><span>或者使用</span><span>message.setText("Hello");</span></span></p>
<p class="MsoNormal"><span>message.setSubject("Title");</span></p>
<p class="MsoNormal"><span>message.setFrom(addressFrom);</span></p>
<p class="MsoNormal"><span>message.addRecipient(Message.RecipientType.TO,addressTo);</span></p>
<p class="MsoNormal"><span>message.addRecipient(Message.RecipientType.CC,addressCopy);</span></p>
<p class="MsoNormal"><span>message.saveChanges();</span></p>
<p class="MsoNormal"><span><span></span></span></p>
<p class="MsoNormal"><span>Transport transport = session.getTransport("smtp");</span></p>
<p class="MsoNormal"><span>transport.connect("smtp.126.com", "cqhcp", "12345");</span></p>
<p class="MsoNormal"><span>transport.send(message);</span></p>
<p class="MsoNormal"><span>transport.close();</span></p>
<p class="MsoNormal"></p>
<p class="MsoNormal"><span><span>若想在登录时判断输入的用户名和密码是否正确,正确时登录,不正确时提示出错而不登录,只需像下面这样实现:</span></span></p>
<p class="MsoNormal"><span><span>try {<br> session.setDebug(true);<br> Transport trans = session.getTransport("smtp");<br> trans.connect("smtp.126.com",account, password);</span></span></p>
<p class="MsoNormal"><span><span> } catch (AuthenticationFailedException ae) {<br> ae.printStackTrace();<br> DisplayToast("用户名或者密码错误!");//其中DisplayToast是我自己写的一个Toast<br><br>} catch (MessagingException mex) {<br> mex.printStackTrace();<br> Exception ex = null;<br> if ((ex = mex.getNextException()) != null) {<br> ex.printStackTrace();<br>  }<br>}</span></span></p>
<p class="MsoNormal"></p>
<p class="MsoNormal"><span>以下几篇文章有更加完整的实现,非常好,可以参考。</span></p>
<p class="MsoNormal"></p>
<p class="MsoNormal"><a href="http://www.javaeye.com/topic/352753">http://www.javaeye.com/topic/352753</a></p>
<p class="MsoNormal"><a href="http://www.cnblogs.com/love2009/archive/2009/02/24/1397201.html">http://www.cnblogs.com/love2009/archive/2009/02/24/1397201.html</a></p>
<p class="MsoNormal"><a href="http://www.blogjava.net/TrampEagle/archive/2006/05/26/48326.html">http://www.blogjava.net/TrampEagle/archive/2006/05/26/48326.html</a></p>
<p></p>
<p class="p0"></p>
<p class="p0"></p>
</span></span></span></p>
</span></span></p>
</span></p>
分享到:
评论

相关推荐

    android 发邮件源码

    本项目“android 发邮件源码”提供了一个实际的示例,可以帮助开发者理解和实现这个功能。以下是对该源码工程中关键知识点的详细解释: 1. **JavaMail API**: Android开发中,发送邮件通常会用到JavaMail API,这是...

    Android发邮件源码:IMAPMail.zip

    以上是根据"Android发邮件源码:IMAPMail.zip"的标题和描述推测出的一些关键知识点。具体到压缩包内的"IMAPMail"文件,可能包含了实现这些功能的类和方法。开发者在使用这段源码时,需要根据自己的项目需求进行适当...

    android发邮件用的mail有关的三个jar包

    这通常涉及到JavaMail API的使用,而“android发邮件用的mail有关的三个jar包”正是为了实现这一功能所需的库文件。这些jar包包含了处理SMTP(简单邮件传输协议)和其他邮件传输协议所需的核心类和方法。 首先,...

    Android 发邮件功能实例所需jar包(二)

    Android 发邮件功能所需jar包,绝对好用!代码下下来就可以用 源码地址:http://blog.csdn.net/lixuelong/archive/2011/06/13/6542151.aspx

    android发邮件

    在Android平台上发送电子邮件,通常需要借助JavaMail API来实现,因为Android系统本身并不直接支持SMTP(简单邮件传输协议)通信。JavaMail API是一个开源库,它提供了与邮件服务器交互的接口,可以用来创建、发送和...

    Android 发邮件功能实例所需jar包(三)

    Android 发邮件功能所必须的jar包,绝对好用! 源码地址:http://blog.csdn.net/lixuelong/archive/2011/06/13/6542151.aspx

    Android发邮件用到的jar包

    在Android平台上,开发...这个示例展示了如何配置SMTP服务器信息,创建一个邮件,设置发件人、收件人、主题和内容,然后发送邮件的基本流程。注意,实际使用时需要根据你的邮件服务商提供的SMTP服务器信息进行调整。

    Android 发邮件功能实例所需jar包(一)

    Android 发邮件代码实例所需jar包,别处下的不一定有用啊,这是修正了的! 源码地址:http://blog.csdn.net/lixuelong/archive/2011/06/13/6542151.aspx

    android 发邮件

    3. **创建邮件**:使用`Message`类创建邮件对象,设置发件人、收件人、主题和正文。`InternetAddress`类用于处理邮件地址。 ```java Properties props = new Properties(); props.put("mail.smtp.host", "smtp....

    Android发邮件

    在Android平台上实现邮件发送功能是一项常见的任务,尤其对于开发者来说,了解如何在应用程序中集成这一功能至关重要。在本文中,我们将深入探讨如何在Android应用中实现邮件发送,并结合提供的两个DEMO源码...

    发邮件Demo_Android

    "发邮件Demo_Android"是一个针对这一需求的示例项目,它演示了如何在不依赖其他第三方应用或系统自带邮件应用的前提下,通过后台服务完成邮件发送。 首先,我们来理解Android中的服务(Service)。Service是Android...

    android邮件发送几种方式

    在Android平台上,发送邮件有多种方法,每种方式都有其适用场景和优缺点。下面将详细介绍几种常见的Android邮件发送方式。 1. **使用Intent启动邮件应用** Android系统内置了对邮件应用的支持,可以通过Intent来...

    android后台自动发邮件所需jar包

    总的来说,`android后台自动发邮件所需jar包`涉及的主要知识点包括: 1. JavaMail API的使用,包括创建邮件对象、配置SMTP服务器、设置邮件属性等。 2. JavaBeans Activation Framework的作用,处理邮件中的不同数据...

    Android向通讯录中的联系人发邮件.rar

    Android向通讯录中指定的某个联系人发邮件,代码利用 Android 提供的Intent 接口android.content.Intent.ACTION_SEND 发送一个电子邮件给本地联系人,实际上在 Android 上使用的邮件发送服务是调用Gmail程序,而非...

    Android自带的邮件发送代码

    在Android平台上,开发人员可以利用内置的SMTP(Simple Mail Transfer Protocol)支持来实现邮件发送功能。这个过程涉及到多个步骤和关键知识点,包括设置权限、构建邮件消息对象、选择邮件服务提供商以及处理网络...

    Android发送邮件功能实现

    使用`Message`类创建邮件对象,设置发件人、收件人、主题和内容。`Message`对象可以使用`MimeMessage`实现,它支持多部分消息,可以包含文本、HTML、附件等。 4. **构建邮件内容** - **文本邮件**:使用`...

    Android 后台发送邮件

    接着,我们创建`MimeMessage`对象并填充发件人、收件人、主题和正文,最后通过`Transport.send()`方法发送邮件。 在Android应用中,你可能需要在后台线程或者IntentService中调用`sendEmail()`方法,以避免阻塞UI...

    android 后台发送邮件

    导入必要的依赖后,你可以创建一个Message对象,设置发件人、收件人、主题和正文,然后通过Transport类发送邮件。 6. **权限申请**: 在Android 6.0及以上版本,需要申请“INTERNET”和“ACCESS_NETWORK_STATE”权限...

    android 邮件发送demo

    在Android平台上,开发一款应用程序来发送邮件是一项常见的需求。这个"android邮件发送demo"就是针对这一功能的一个示例代码,可以帮助开发者理解并实现通过Android应用发送邮件的功能。在这个项目中,我们将探讨...

    Android邮件客户端Demo

    在Android邮件客户端Demo中,UI设计应当简洁明了,使用户能快速找到他们需要的功能,如收件箱、发件箱、草稿箱和设置选项。 7. **性能优化**:考虑到移动设备的资源限制,优化性能是必不可少的。开发者需要确保应用...

Global site tag (gtag.js) - Google Analytics