Android 客户端发送邮件(JMail方式)

项目用到了Android 客户端发送邮件,不能够使用Android 的服务,那就用JMail喽,本来以为很简单的事情折腾了好半天才搞定!

必须的jar

  • mail.jar
  • activation.jar
  • additionnal.jar.zip

下载链接: http://download.csdn.net/detail/vestigge/5101219


首先是调用的代码:

		Mail m = new Mail("******@gmail.com", "密码");
		String[] toArr = { "569629066@qq.com"};
		m.set_to(toArr);
		m.set_from("Vesti_Yang");
		m.set_subject("Android 客户端测试邮件");
		m.set_body("Android 客户端测试链接\n\n http://img.my.csdn.net/uploads/201210/29/1351508410_1812.png");

		try
		{
			//m.addAttachment("/sdcard/filelocation");
			if (m.send())
			{
				Toast.makeText(MainActivity.this, "邮件发送成功", Toast.LENGTH_LONG).show();
			}
			else
			{
				Toast.makeText(MainActivity.this, "邮件发送失败", Toast.LENGTH_LONG).show();
			}
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}

Mail.java的实现:

public class Mail extends javax.mail.Authenticator
{
	private String		_user;
	private String		_pass;

	private String[]	_to;
	private String		_from;

	private String		_port;
	private String		_sport;

	private String		_host;

	private String		_subject;
	private String		_body;

	private boolean		_auth;

	private boolean		_debuggable;

	private Multipart	_multipart;


	public Mail()
	{
		// 邮件服务器,QQ邮箱就用smtp.qq.com,其它类似
		_host = "smtp.gmail.com";
		// smtp 端口
		_port = "465";
		// socketfactory 端口
		_sport = "465";

		_user = "";
		_pass = "";
		_from = "";
		_subject = "";
		_body = "";

		_debuggable = false;
		 // smtp默认验证
		_auth = true;

		_multipart = new MimeMultipart();

		MailcapCommandMap mc = (MailcapCommandMap) CommandMap.getDefaultCommandMap();
		mc.addMailcap("text/html;; x-java-content-handler=com.sun.mail.handlers.text_html");
		mc.addMailcap("text/xml;; x-java-content-handler=com.sun.mail.handlers.text_xml");
		mc.addMailcap("text/plain;; x-java-content-handler=com.sun.mail.handlers.text_plain");
		mc.addMailcap("multipart/*;; x-java-content-handler=com.sun.mail.handlers.multipart_mixed");
		mc.addMailcap("message/rfc822;; x-java-content-handler=com.sun.mail.handlers.message_rfc822");
		CommandMap.setDefaultCommandMap(mc);
	}

	public Mail(String user, String pass)
	{
		this();
		_user = user;
		_pass = pass;
	}

	public boolean send() throws Exception
	{
		Properties props = _setProperties();

		if (!_user.equals("") && !_pass.equals("") && _to.length > 0 && !_from.equals("") && !_subject.equals("") && !_body.equals(""))
		{
			Session session = Session.getInstance(props, this);
			MimeMessage msg = new MimeMessage(session);
			msg.setFrom(new InternetAddress(_from));
			InternetAddress[] addressTo = new InternetAddress[_to.length];
			for (int i = 0; i < _to.length; i++)
			{
				addressTo[i] = new InternetAddress(_to[i]);
			}
			msg.setRecipients(MimeMessage.RecipientType.TO, addressTo);
			msg.setSubject(_subject);
			msg.setSentDate(new Date());
			BodyPart messageBodyPart = new MimeBodyPart();
			messageBodyPart.setText(_body);
			_multipart.addBodyPart(messageBodyPart);
			msg.setContent(_multipart);
			Transport.send(msg);
			return true;
		}
		else
		{
			return false;
		}
	}

	public void addAttachment(String filename) throws Exception
	{
		BodyPart messageBodyPart = new MimeBodyPart();
		DataSource source = new FileDataSource(filename);
		messageBodyPart.setDataHandler(new DataHandler(source));
		messageBodyPart.setFileName(filename);
		_multipart.addBodyPart(messageBodyPart);
	}

	@Override
	public PasswordAuthentication getPasswordAuthentication()
	{
		return new PasswordAuthentication(_user, _pass);
	}

	private Properties _setProperties()
	{
		Properties props = new Properties();

		props.put("mail.smtp.host", _host);

		if (_debuggable)
		{
			props.put("mail.debug", "true");
		}

		if (_auth)
		{
			props.put("mail.smtp.auth", "true");
		}

		props.put("mail.smtp.port", _port);
		props.put("mail.smtp.socketFactory.port", _sport);
		props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
		props.put("mail.smtp.socketFactory.fallback", "false");

		return props;
	}

	public String get_user()
	{
		return _user;
	}

	public void set_user(String _user)
	{
		this._user = _user;
	}

	public String get_pass()
	{
		return _pass;
	}

	public void set_pass(String _pass)
	{
		this._pass = _pass;
	}

	public String[] get_to()
	{
		return _to;
	}

	public void set_to(String[] _to)
	{
		this._to = _to;
	}

	public String get_from()
	{
		return _from;
	}

	public void set_from(String _from)
	{
		this._from = _from;
	}

	public String get_port()
	{
		return _port;
	}

	public void set_port(String _port)
	{
		this._port = _port;
	}

	public String get_sport()
	{
		return _sport;
	}

	public void set_sport(String _sport)
	{
		this._sport = _sport;
	}

	public String get_host()
	{
		return _host;
	}

	public void set_host(String _host)
	{
		this._host = _host;
	}

	public String get_subject()
	{
		return _subject;
	}

	public void set_subject(String _subject)
	{
		this._subject = _subject;
	}

	public String get_body()
	{
		return _body;
	}

	public void set_body(String _body)
	{
		this._body = _body;
	}

	public boolean is_auth()
	{
		return _auth;
	}

	public void set_auth(boolean _auth)
	{
		this._auth = _auth;
	}

	public boolean is_debuggable()
	{
		return _debuggable;
	}

	public void set_debuggable(boolean _debuggable)
	{
		this._debuggable = _debuggable;
	}

	public Multipart get_multipart()
	{
		return _multipart;
	}

	public void set_multipart(Multipart _multipart)
	{
		this._multipart = _multipart;
	}


}


最后是截图:

Android 客户端发送邮件(JMail方式)_第1张图片


你可能感兴趣的:(android,smtp,发送邮件)