【Android】发送Email(内置Gmail和JavaMail)

Android发送Email的两种方法:

 

方法一:通过Intent调用内置的Gmail发送邮件

优点:简单、方便

缺点:缺少灵活性,只能使用关联的gmail发送邮件

 

示例代码:

 

 

Java代码 复制代码  收藏代码
  1. String[] recipients = {"接收方邮件地址""接收方邮件地址"};   
  2. String subject = "邮件标题";   
  3. String text = "邮件内容";   
  4. Intent intent = new Intent();   
  5. intent.setAction(Intent.ACTION_SEND);   
  6. intent.putExtra(Intent.EXTRA_EMAIL, recipients);   
  7. intent.putExtra(Intent.EXTRA_SUBJECT, subject);   
  8. intent.putExtra(Intent.EXTRA_TEXT, text);   
  9. startActivity(Intent.createChooser(intent, "Sending..."));  

方法二:使用JavaMail发送邮件

优点:灵活

缺点:复杂,配置麻烦

 

配置步骤:

 

  1. 下载Android版本JavaMail包,additional.jar、mail.jar和activation.jar,下载地址JavaMail-Android

  2. 在项目与src同一目录级别下,新建文件夹lib,将下载的3个jar包放入该文件夹

  3. 右键->Properties->Java Build Path->Libraries,选择Add External JARs,找到项目下lib目录的3个jar包添加OK,最后lib文件夹右键->build path->use as source folder

实现步骤:

 

  1. 建立与邮件服务器间的会话Session

  2. 构建邮件消息MINEMessage

  3. Transport发送邮件

注意:

AndroidManifest下添加网络权限

配置会话Session的Properties时,值为String型"true"和"false",而不是布尔型

 

 

示例代码:

 

Java代码 复制代码  收藏代码
  1. package dyingbleed.iteye;   
  2.   
  3. import java.util.Properties;   
  4.   
  5. import javax.activation.DataHandler;   
  6. import javax.mail.Authenticator;   
  7. import javax.mail.Message;   
  8. import javax.mail.MessagingException;   
  9. import javax.mail.PasswordAuthentication;   
  10. import javax.mail.Session;   
  11. import javax.mail.Transport;   
  12. import javax.mail.internet.AddressException;   
  13. import javax.mail.internet.InternetAddress;   
  14. import javax.mail.internet.MimeMessage;   
  15. import javax.mail.util.ByteArrayDataSource;   
  16.   
  17. public class MailSender extends Authenticator {   
  18.        
  19.     public static final String host = "smtp.gmail.com";    
  20.        
  21.     private final String userName;   
  22.     private final String password;   
  23.        
  24.     private Session session;   
  25.        
  26.     public MailSender(String userName, String password) {   
  27.         this.userName = userName;   
  28.         this.password = password;   
  29.            
  30.         initialize(); //初始化   
  31.     }   
  32.        
  33.     private void initialize() {   
  34.         Properties props = new Properties();   
  35.         props.setProperty("mail.transport.protocol""smtp");   
  36.         props.setProperty("mail.host", host);   
  37.         props.put("mail.smtp.auth"true);   
  38.            
  39.         session = Session.getDefaultInstance(props, this);   
  40.     }   
  41.   
  42.     @Override  
  43.     protected PasswordAuthentication getPasswordAuthentication() {   
  44.         return new PasswordAuthentication(userName, password);   
  45.     }   
  46.        
  47.     /**  
  48.      * 发送Email  
  49.      * @param subject 标题  
  50.      * @param body 内容  
  51.      * @param sender 发送者  
  52.      * @param recipients 接收者  
  53.      * @throws MessagingException   
  54.      * @throws AddressException   
  55.      * */  
  56.     public synchronized void sendMail(String subject, String body, String sender, String recipients) throws AddressException, MessagingException {   
  57.         MimeMessage message = new MimeMessage(session);   
  58.         DataHandler handler = new DataHandler(new ByteArrayDataSource(body.getBytes(), "text/plain"));   
  59.            
  60.         /*  
  61.          * 设置MIME消息  
  62.          * */  
  63.         message.setSender(new InternetAddress(sender));   
  64.         message.setSubject(subject);   
  65.         message.setDataHandler(handler);   
  66.         if(recipients.contains(",")) {   
  67.             message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(recipients));   
  68.         } else {   
  69.             message.setRecipient(Message.RecipientType.TO, new InternetAddress(recipients));   
  70.         }   
  71.            
  72.         Transport.send(message); //发送   
  73.     }   
  74. }

 

 

 

Android通过Intent发送电子邮件含附件

 

 

如何在Android系统中发送带附件的电子邮件呢? 其实通过Intent可以很方便的发送Email,只需要短短10行代码就可以处理,这里Android开发网就以在sdcard上的android123.cwj文件为例,通过Intent来发送电子邮件。完整代码如下

File file = new File("\sdcard\android123.cwj"); //附件文件地址

 Intent intent = new Intent(Intent.ACTION_SEND);
 intent.putExtra("subject", file.getName()); //
 intent.putExtra("body", "android123 - email sender"); //正文
 intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file)); //添加附件,附件为file对象
            if (file.getName().endsWith(".gz")) {
                intent.setType("application/x-gzip"); //如果是gz使用gzip的mime
            } else if (file.getName().endsWith(".txt")) {
                intent.setType("text/plain"); //纯文本则用text/plain的mime
            } else {
                intent.setType("application/octet-stream"); //其他的均使用流当做二进制数据来发送
            }
  startActivity(intent); //调用系统的mail客户端进行发送

 

你可能感兴趣的:(android,session,email,Gmail,javamail)