android使用javamail发送邮件(支持多附件发送 )

本文介绍如何使用JavaMail API实现从Android应用中发送带有附件的电子邮件,包括配置邮件服务器、设置邮件内容及附件等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学校要求参加中国软件杯,然后选了个题目,是一个基于android的阅读器,里面有个很蛋疼的需求,就是要能够将文件以邮件的形式发送,但是又不让调用android系统的邮件功能,上网google了一下,发现有javamail的api可以实现,这种实现方法也是不错的,使用stmp协议,支持的邮件服务器也挺多的,也可以将文件也附件形式发送,解决的附件中文名称乱码问题。

既然是使用javamail的api,自然要导入一些jar到工程中,需要导入mail.jar,activition.jar

不多说,直接上代码

写了一个MailUtils.java

public class MainUtils {

	private int port = 25;  //smtp协议使用的是25号端口
	private String server; // 发件人邮件服务器
	private String user;   // 使用者账号
	private String password; //使用者密码
	
	//构造发送邮件帐户的服务器,端口,帐户,密码
	public MainUtils(String server, int port, String user, String passwd) {
		this.port = port;
		this.user = user;
		this.password = passwd;
		this.server = server;
	}
	
	/**
	*   email  手机人电子邮箱
	*   subject 邮件标题
	*   body 正文内容
	*   paths  发送的附件路径集合
	**/ 
	public void sendEmail(String email, String subject, String body,
			List<String> paths) {
		Properties props = new Properties();
		props.put("mail.smtp.host", server);
		props.put("mail.smtp.port", String.valueOf(port));
		props.put("mail.smtp.auth", "true");
		Transport transport = null;
		Session session = Session.getDefaultInstance(props, null);
		MimeMessage msg = new MimeMessage(session);
		try {
			transport = session.getTransport("smtp");
			transport.connect(server, user, password);    //建立与服务器连接
			msg.setSentDate(new Date());         
			InternetAddress fromAddress = null;
			fromAddress = new InternetAddress(user);
			msg.setFrom(fromAddress);
			InternetAddress[] toAddress = new InternetAddress[1];
			toAddress[0] = new InternetAddress(email);
			msg.setRecipients(Message.RecipientType.TO, toAddress);
			msg.setSubject(subject, "UTF-8");            //设置邮件标题
			MimeMultipart multi = new MimeMultipart();   //代表整个邮件邮件
			BodyPart textBodyPart = new MimeBodyPart();  //设置正文对象
			textBodyPart.setText(body);                  //设置正文
			multi.addBodyPart(textBodyPart);             //添加正文到邮件
			for (String path: fileList) {
				FileDataSource fds = new FileDataSource(fileInfo.absolutePath);   //获取磁盘文件
				BodyPart fileBodyPart = new MimeBodyPart();						  //创建BodyPart
				fileBodyPart.setDataHandler(new DataHandler(fds));           //将文件信息封装至BodyPart对象
				String fileNameNew = MimeUtility.encodeText(fds.getName(),
						"utf-8", null);      //设置文件名称显示编码,解决乱码问题
				fileBodyPart.setFileName(fileNameNew);  //设置邮件中显示的附件文件名
				multi.addBodyPart(fileBodyPart);        //将附件添加到邮件中
			}
			msg.setContent(multi);                      //将整个邮件添加到message中
			msg.saveChanges();
			transport.sendMessage(msg, msg.getAllRecipients());  //发送邮件
			transport.close();
		} catch (NoSuchProviderException e) {
			e.printStackTrace();
		} catch (MessagingException e) {
			e.printStackTrace();
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
	}
}

再附一些常用的邮件服务器

126邮箱 
 POP3服务器:pop.126.com    SMTP服务器:smtp.126.com 

163邮箱 
 POP3服务器:pop.163.com    SMTP服务器:smtp.163.com 
 
yahoo邮箱 
POP3服务器:pop.mail.yahoo.com.cn    SMTP服务器:smtp.mail.yahoo.com.cn 
 
Sohu邮箱 
POP3服务器:pop3.sohu.com     SMTP服务器:smtp.sohu.com  
 
Gmail邮箱 
POP3服务器是pop.gmail.com            SMTP服务器是smtp.gmail.com

  

QQ邮箱 
  POP3服务器:pop.qq.com    SMTP服务器:smtp.qq.com   



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值