Android上发送带附件的邮件

简介: Android上发送带附件的邮件

准备工作-下载最新版本的JMail


https://java.net/projects/javamail/pages/Home#Download_JavaMail_1.5.2_Release


http://www.oracle.com/technetwork/java/javase/downloads/index-135046.html

在android上发送邮件方式:

第一种:借助GMail APP客户端,缺点是必须使用GMail帐号,有点是比较方便

不需要写很多代码,但是不是很灵活。

第二种:基于JMail实现,可以很灵活的自己设置各种属性,不需要GMail帐号

在第二种方式的实现之前,看一下JMail对EMail结构的划分:

基于SMTP协议发送EMail,所以客户端必须要知道SMTP的主机

腾讯邮件的SMTP主机为:stmp.qq.com端口为465基于SSL协议

最后我做了一个简单的封装,把发送文本加图像附件的功能做出了

一个单独的Class,只要调用一下即可完成:

package com.gloomyfish.jmail.demo;
 
import java.util.Date;
import java.util.Properties;
 
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.Address;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
 
public class EMailSender {
 
  private String host;
  private String port;
  private String userName;
  private String password;
  private String[] images;
 
  public String[] getImagePath() {
    return images;
  }
 
  public void setImagePath(String[] imagePath) {
    this.images = imagePath;
  }
 
  public EMailSender(String host, String port, String userName, String password) 
  {
    this.host = host;
    this.port = port;
    this.userName = userName;
    this.password = password;
  }
 
  public void sendEmail(String subject, String recepits, String sender, String content) 
  {
    Properties props = new Properties();
    props.put("mail.smtp.host", host);  //设置smtp的服务器地址
    // props.put("mail.smtp.starttls.enable", "true");
    // props.put("mail.smtp.port", port); // 设置端口
    // props.put("mail.smtp.auth", "true"); //设置smtp服务器要身份验证。
    
    props.put("mail.smtp.socketFactory.port", port);
    props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
    props.put("mail.smtp.auth", "true");
    props.put("mail.smtp.port", port);
    
    // 返回授权Base64编码
    PopupAuthenticator auth = new PopupAuthenticator(userName, password);
    // 获取会话对象
    Session session = Session.getInstance(props, auth); 
    // 设置为DEBUG模式
    session.setDebug(true);
    
    // 邮件内容对象组装
    MimeMessage message = new MimeMessage(session);
    try
    {
      Address addressFrom = new InternetAddress(sender, "Jia Zhi Gang");
      Address addressTo = new InternetAddress(recepits, "My QQ E-Mail");
      message.setSubject(subject);
      message.setSentDate(new Date());
      message.setFrom(addressFrom);
      message.addRecipient(Message.RecipientType.TO,addressTo);
       
      // 邮件文本/HTML内容
      Multipart multipart = new MimeMultipart();
      MimeBodyPart messageBodyPart = new MimeBodyPart();
          messageBodyPart.setContent(content, "text/html");
          multipart.addBodyPart(messageBodyPart);
          
          // 添加邮件附件
          if (images != null && images.length > 0) {
              for (String filePath : images) {
                  MimeBodyPart attachPart = new MimeBodyPart();  
                  DataSource source = new FileDataSource(filePath);
                  attachPart.setDataHandler(new DataHandler(source));
                  attachPart.setFileName(filePath);
                  multipart.addBodyPart(attachPart);
              }
          }
 
          // 保存邮件内容
          message.setContent(multipart);
      
      // 获取SMTP协议客户端对象,连接到指定SMPT服务器
      Transport transport = session.getTransport("smtp");
      transport.connect(host, Integer.parseInt(port), userName, password);
      System.out.println("connet it success!!!!");
      
      // 发送邮件到SMTP服务器
      Thread.currentThread().setContextClassLoader( getClass().getClassLoader() );
      Transport.send(message);
      System.out.println("send it success!!!!");
      
      // 关闭连接
      transport.close();
    }
    catch(Exception e)
    {
      e.printStackTrace();
    }
  }
 
  public String getHost() {
    return host;
  }
 
  public void setHost(String host) {
    this.host = host;
  }
 
  public String getPort() {
    return port;
  }
 
  public void setPort(String port) {
    this.port = port;
  }
 
  public String getUserName() {
    return userName;
  }
 
  public void setUserName(String userName) {
    this.userName = userName;
  }
 
  public String getPassword() {
    return password;
  }
 
  public void setPassword(String password) {
    this.password = password;
  }
 
}


用户授权类:

package com.gloomyfish.jmail.demo;
 
 
import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;
 
 
class PopupAuthenticator extends Authenticator {
  private String userName;
  private String password;
  public PopupAuthenticator(String userName, String password)
  {
    this.userName = userName;
    this.password = password;
  }
    public PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication(userName, password);
    }
}

1.在android上发送邮件必须自己导入三个相关的JAVA文件


上述JAR文件的下载地址已经在文章开始处给出!

相关文章
|
Android开发 数据安全/隐私保护
如何在Android上发送加密邮件?推荐这四大神器
本文讲的是如何在Android上发送加密邮件?推荐这四大神器,在移动网络安全意识增加的时代,大家都希望自己发送消息不被其他人偷窥。无论是公司的机密业务还是个人的敏感数据,都需要被加密。不过说到加密,这可是个技术活,不知道你会不会,今天小编就提供4中神器,让你轻松搞定这一切。
2854 0
|
Java Android开发
Android上发送带附件的邮件
准备工作-下载最新版本的JMail https://java.net/projects/javamail/pages/Home#Download_JavaMail_1.5.2_Release http://www.oracle.com/technetwork/java/javase/downloads/index-135046.html 在android上发送邮件方式: 第一种:借助GMail APP客户端,缺点是必须使用GMail帐号,有点是比较方便 不需要写很多代码,但是不是很灵活。
1157 0
|
Android开发
Android调用邮件客户端
main.xml如下: mainActivity如下: package c.c; import android.
954 0
|
9天前
|
安全 Java Android开发
安卓开发中的新趋势:Kotlin与Jetpack的完美结合
【6月更文挑战第20天】在不断进化的移动应用开发领域,Android平台以其开放性和灵活性赢得了全球开发者的青睐。然而,随着技术的迭代,传统Java语言在Android开发中逐渐显露出局限性。Kotlin,一种现代的静态类型编程语言,以其简洁、安全和高效的特性成为了Android开发中的新宠。同时,Jetpack作为一套支持库、工具和指南,旨在帮助开发者更快地打造优秀的Android应用。本文将探讨Kotlin与Jetpack如何共同推动Android开发进入一个新的时代,以及这对开发者意味着什么。
|
4天前
|
Java 开发工具 Android开发
探索Android与iOS开发的差异:平台选择对项目成功的影响
在移动应用开发的广阔天地中,Android和iOS两大平台各自占据着半壁江山。本文将深入探讨这两个平台在开发过程中的关键差异点,包括编程语言、开发工具、用户界面设计、性能优化以及市场覆盖等方面。通过对这些关键因素的比较分析,旨在为开发者提供一个清晰的指南,帮助他们根据项目需求和目标受众做出明智的平台选择。
|
5天前
|
编解码 Android开发 iOS开发
深入探索Android与iOS开发的差异与挑战
【6月更文挑战第24天】在移动应用开发的广阔舞台上,Android和iOS两大操作系统扮演着主角。它们各自拥有独特的开发环境、工具集、用户基础及市场策略。本文将深度剖析这两个平台的开发差异,并探讨开发者面临的挑战,旨在为即将踏入或已在移动开发领域奋斗的开发者提供一份实用指南。
27 13
|
4天前
|
监控 Android开发 iOS开发
探索Android与iOS开发的差异:平台、工具和用户体验的比较
【6月更文挑战第25天】在移动应用开发的广阔天地中,Android和iOS两大平台各领风骚,它们在开发环境、工具选择及用户体验设计上展现出独特的风貌。本文将深入探讨这两个操作系统在技术实现、市场定位和用户交互方面的关键差异,旨在为开发者提供一个全景式的视图,帮助他们在面对项目决策时能够更加明智地选择适合自己项目需求的平台。
|
6天前
|
XML Java 开发工具
Android Studio开发Android TV
【6月更文挑战第19天】
|
3天前
|
缓存 测试技术 Shell
详细解读Android开发命令行完全攻略
详细解读Android开发命令行完全攻略
|
10天前
|
存储 Java 数据库连接
Android Java开发异步
【6月更文挑战第15天】