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上发送带附件的邮件,布布扣,bubuko.com

时间: 2024-12-15 01:39:05

Android上发送带附件的邮件的相关文章

(转)用javamail发送带附件的邮件

本文转载自:http://redleaf.iteye.com/blog/78217 mail.java 代码 package mail; import java.util.* ; import java.io.* ; import javax.mail.* ; import javax.mail.internet.* ; import javax.activation.* ; public class Mail { //定义发件人.收件人.SMTP服务器.用户名.密码.主题.内容等 privat

自动化测试发送带附件的邮件

自动化测试发送带附件的邮件 标签(空格分隔): 带附件邮件 在我们的自动化测试中,有时候会发送报告,有时候会发送带附件的报告,具体带附件的报告怎么操作呢? 具体的步骤如下述所示:如下是QQ邮箱为例 import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart # 用于传送附件 smtpserver = 'smtp.exmail.qq.com' user = '*

C#发送带附件的邮件的代码

如下的代码是关于C#发送带附件的邮件的代码. MailMessage m = new MailMessage();m.Subject = "File attachment!";m.Body = "See the attached file.";m.Attachments.Add(new Attachment(@"C:test.txt"));SmtpClient client = new SmtpClient("smtp.w3mentor

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 APPclient.缺点是必须使用GMail帐号,有点是比較方便 不须要写非常多代码.可是不是非

【Mail】JavaMail发送带附件的邮件

上一篇讲了使用JavaMail发送普通邮件([Mail]JavaMail介绍及发送邮件(一)),本例讲发送复杂的邮件(带有附件的邮件) 生成一封复杂的邮件 新建一个JavaWeb的Maven工程,引入javamail.jar包,maven引用如下: 1 <!-- javamail --> 2 <dependency> 3 <groupId>javax.mail</groupId> 4 <artifactId>mail</artifactId

Apache Mail 发送带附件的邮件

MultiPartEmail email = new MultiPartEmail(); email.setDebug(true); email.setHostName("smtp.sina.com"); email.setAuthentication("发送邮件帐号", "邮箱登录密码"); email.setCharset("UTF-8"); try { email.setFrom("发送邮件帐号",

【python】用SMTP模块发送带附件的邮件

第一篇博客!参考链接? 在书上看了用SMTP模块发邮件,试过之后发现并没有什么用.163邮箱开启了SMTP服务后,登陆了发送的时候却被拒收了. 找了前人的资料,发现被过期的教程害死了. 以下代码有效: import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from email.mime.image import MIMEImage #全部为python内

如何用unity3d实现发送带附件的邮件

以Gmail为例.点击屏幕的Capture按钮得到当前屏幕截图,点击Send按钮将之前的截图作为附件发送邮件. using UnityEngine; using System.Collections; using System; using System.Net; using System.Net.Mail; using System.Net.Security; using System.Security.Cryptography.X509Certificates; public class T

c# 发送带附件的邮件

using System; using System.IO; using System.Net; using System.Net.Mail; using System.Net.Mime; using System.Text; public class EmailUitls { /// <summary> /// 发送邮件 /// </summary> /// <param name="fileName">附件路径</param> ///