项目用到了Android 客户端发送邮件,不能够使用Android 的服务,那就用JMail喽,本来以为很简单的事情折腾了好半天才搞定!
必须的jar
下载链接: 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(); }
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; } }
最后是截图: