Send e-mail in Android without user interacton

前端 未结 2 584
感情败类
感情败类 2021-01-31 23:02

I would like to send an e-mail in my app using whatever default mail provider the user already has setup. It must be possible to send the e-mail without requiring any user inter

相关标签:
2条回答
  • 2021-01-31 23:42

    Try this code...

    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();}
                          }
                        }
    
    0 讨论(0)
  • 2021-02-01 00:00

    After some more digging around, I think there is a solution. Google has now added support for Gmail authentication using OAuth 2.0 which avoids the need to access the user's username and password. Since my app will require the user to have a Gmail account, this might be the solution. Of course this won't work for any other e-mail provider that doesn't support OAuth but since Google is concerned about protecting username/passwords, this approach seems to be right. Need to look into how to use OAuth from within my app, but theoretically it should be possible. Once a user grants permission to a Google service, the app receives a token that is used for the lifetime that the permission remains. The question that is still unresolved is whether Gmail supports sending an e-mail using OAuth:

    Google Brings OAuth 2.0 Support To Gmail And Google Talk To Make Third-Party Apps More Secure

    OAuth2 Support for Gmail

    Google's sample code for Gmail support and OAuth2

    Android app demonstrating how to send e-mail using OAuth

    YouTube video showing how a mobile app uses 2 step verification in an app

    Android docs on using OAuth 2.0

    Code sample to send e-mail using OAuth2

    0 讨论(0)
提交回复
热议问题