在没有用户交互的情况下在Android中发送电子邮件

我想在我的应用程序中使用用户已经设置的任何默认邮件提供程序发送电子邮件。 必须可以发送电子邮件,而不需要任何用户交互。 如果我可以避免显示任何用户界面,这将是最好的解决scheme。 唯一不能接受的是硬编码或请求用户input他们的电子邮件凭证。 用户必须已经使用他们的凭据设置了他们的帐户,例如Gmail。 我所有的应用程序都使用已经设置的现有电子邮件提供程序。

我在这里find的大多数post使用了一个意图,但从我的理解,这将显示电子邮件用户界面,并要求用户按发送button。

Solutions Collecting From Web of "在没有用户交互的情况下在Android中发送电子邮件"

经过更多的挖掘,我认为有一个解决scheme。 Google现在使用OAuth 2.0增加了对Gmail身份validation的支持,避免了访问用户的用户名和密码的需要。 由于我的应用程序将要求用户有一个Gmail帐户,这可能是解决scheme。 当然,这不适用于任何其他不支持OAuth的电子邮件提供商,但由于Google担心保护用户名/密码,这种方法似乎是正确的。 需要研究如何从我的应用程序中使用OAuth,但理论上应该是可能的。 一旦用户向Google服务授予权限,应用程序就会收到一个用于该权限保留期限的令牌。 问题仍然没有解决,Gmail是否支持使用OAuth发送电子邮件:

Google将OAuth 2.0支持引入Gmail和Google Talk,使第三方应用程序更安全

OAuth2支持Gmail

Google的Gmail支持示例代码和OAuth2

Android应用程序演示如何使用OAuth发送电子邮件

YouTubevideo展示了移动应用如何在应用中使用两步validation

有关使用OAuth 2.0的Android文档

代码示例使用OAuth2发送电子邮件

试试这个代码…

public class SendAttachment{ public static void main(String [] args){ //to address String to="abc@abc.com";//change accordingly //from address final String user="efg@efg.com";//change accordingly final String password="password";//change accordingly 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); //1) get the session object Properties properties = System.getProperties(); properties.put("mail.smtp.port", "465"); properties.put("mail.smtp.host", "smtp.gmail.com"); properties.put("mail.smtp.socketFactory.port", "465"); properties.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); properties.put("mail.smtp.auth", "true"); properties.put("mail.smtp.port", "465"); Session session = Session.getDefaultInstance(properties, new javax.mail.Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(user,password); } }); //2) compose message try{ MimeMessage message = new MimeMessage(session); message.setFrom(new InternetAddress(user)); message.addRecipient(Message.RecipientType.TO,new InternetAddress(to)); message.setSubject("Hii"); //3) create MimeBodyPart object and set your message content BodyPart messageBodyPart1 = new MimeBodyPart(); messageBodyPart1.setText("How is This"); //4) create new MimeBodyPart object and set DataHandler object to this object MimeBodyPart messageBodyPart2 = new MimeBodyPart(); //Location of file to be attached String filename = Environment.getExternalStorageDirectory().getPath()+"/R2832.zip";//change accordingly DataSource source = new FileDataSource(filename); messageBodyPart2.setDataHandler(new DataHandler(source)); messageBodyPart2.setFileName("Hello"); //5) create Multipart object and add MimeBodyPart objects to this object Multipart multipart = new MimeMultipart(); multipart.addBodyPart(messageBodyPart1); multipart.addBodyPart(messageBodyPart2); //6) set the multiplart object to the message object message.setContent(multipart ); //7) send message Transport.send(message); System.out.println("MESSAGE SENT...."); }catch (MessagingException ex) {ex.printStackTrace();} } }