发送电子邮件自动拥有和附件

时间:2012-09-27 05:59:11

标签: android javamail

我曾使用JavaMail API使用Gmail身份验证在Android中发送电子邮件,但它确实很好用,但现在我想附加一个文件并自动发送。

这是我自动收到发送电子邮件的链接:

Sending Email in Android using JavaMail API without using the default/built-in app

3 个答案:

答案 0 :(得分:0)

使用此功能:

public synchronized void sendMail(String subject, String body, String sender, String recipients, String fileName) throws Exception {   
    try{



    MimeMessage message = new MimeMessage(session);   
   // DataHandler handler = new DataHandler(new ByteArrayDataSource(body.getBytes(), "text/plain"));
    message.setFrom(new InternetAddress(sender));
    if (recipients.indexOf(',') > 0)   
        message.addRecipients(Message.RecipientType.TO, InternetAddress.parse(recipients));   
    else  
        message.addRecipient(Message.RecipientType.TO, new InternetAddress(recipients));
    message.setSubject(subject); 

    MimeBodyPart messageBodyPart = new MimeBodyPart();

    messageBodyPart.setText(body);

    Multipart multipart = new MimeMultipart();
    multipart.addBodyPart(messageBodyPart);

    // Part two is attachment
    messageBodyPart = new MimeBodyPart();
    DataSource source = 
      new FileDataSource(fileName);
    messageBodyPart.setDataHandler(
      new DataHandler(source));
    messageBodyPart.setFileName(fileName);
    multipart.addBodyPart(messageBodyPart);

    // Put parts in message
    message.setContent(multipart);

    // Send the message
    Transport.send( message );

    }catch(Exception e){

    }
}   

答案 1 :(得分:0)

您可以使用Multipart实例执行此操作。

尝试这样的事情

DataSource source = new FileDataSource(filename);
messageBodyPart.setDataHandler(new DataHandler(source));
messageBodyPart.setFileName(filename);
multipart.addBodyPart(messageBodyPart);  

现在将此multipart实例添加到message,其中的邮件是MimeMessage的对象。

答案 2 :(得分:0)

试试这段代码..

     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();}
      }
    }