Java Mail,发送多个附件不起作用

时间:2012-01-23 10:50:29

标签: java javamail

我在没有运气的情况下查看了互联网上的许多条目。

这是我的代码:

import java.io.IOException;
import java.util.Properties;

import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

public class MailTest
{

    public static void main(String[] args) throws AddressException, MessagingException, IOException
    {
        String host = "***";
        String from = "b";
        String to = "***";

        // Get system properties
        Properties props = System.getProperties();

        // Setup mail server
        props.put("mail.smtp.host", host);

        // Get session
        Session session = Session.getDefaultInstance(props, null);

        // Define message
        MimeMessage message = new MimeMessage(session);
        message.setFrom(new InternetAddress(from));
        message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
        message.setSubject("Hello JavaMail");
        message.setText("Welcome to JavaMail");

        // Handle attachment 1
        MimeBodyPart messageBodyPart1 = new MimeBodyPart();
        messageBodyPart1.attachFile("c:/Temp/a.txt");

        // Handle attachment 2
        MimeBodyPart messageBodyPart2 = new MimeBodyPart();
        messageBodyPart2.attachFile("c:/Temp/b.txt");

        MimeMultipart multipart = new MimeMultipart("related");

        multipart.addBodyPart(messageBodyPart1);
        multipart.addBodyPart(messageBodyPart2);

        message.setContent(multipart);

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

结果是我只获得了第一个文件。

  1. 我尝试多次调用attachFile方法,但之后只应用最后一个附件
  2. 我尝试使用addBodyPart中的索引:没有帮助
  3. 我查看了普通邮件,我看到其中的其他文件具有相同的标识符,并且由于某种原因它未在附件中列出。

    任何帮助将不胜感激, 戴夫

3 个答案:

答案 0 :(得分:22)

Multipart multipart = new MimeMultipart("mixed");
for (String str : attachment_PathList) {
    MimeBodyPart messageBodyPart = new MimeBodyPart();
    DataSource source = new FileDataSource(str);
    messageBodyPart.setDataHandler(new DataHandler(source));
    messageBodyPart.setFileName(source.getName());
    multipart.addBodyPart(messageBodyPart);
}
msg.setContent(multipart);
Transport.send(msg);

答案 1 :(得分:1)

    try
    {
        String host = "smtp.gmail.com";
        String from = "sender gmail id";
        String pass = "sender password";
        Properties props = System.getProperties();
        props.put("mail.smtp.starttls.enable", "true"); // added this line
        props.put("mail.smtp.host", host);
        props.put("mail.smtp.user", from);
        props.put("mail.smtp.password", pass);
        props.put("mail.smtp.port", "587");
        props.put("mail.smtp.auth", "true");
        String[] to = {"receiver ids"}; // In this array you can add more ids
        Session session = Session.getDefaultInstance(props, null);
        MimeMessage message = new MimeMessage(session);
        message.setFrom(new InternetAddress(from));
        InternetAddress[] toAddress = new InternetAddress[to.length];
        // To get the array of addresses
        for( int i=0; i < to.length; i++ )
        { // changed from a while loop
            toAddress[i] = new InternetAddress(to[i]);
        }
        System.out.println(Message.RecipientType.TO);
        for( int i=0; i < toAddress.length; i++) 
        {
        // changed from a while loop
            message.addRecipient(Message.RecipientType.TO, toAddress[i]);
        }
        message.setSubject("sending in a group");
        message.setText("Welcome to JavaMail");
        // set ur text message
        BodyPart messageBodyPart1 = new MimeBodyPart();
        messageBodyPart1.setText("This is message body");
        //file path that you want to attatch
        // you are able to send multipule file simultaneously
        String filename[] ={"C:\\Documents and Settings\\admin\\Desktop\\imp data\\emil id.txt" ,"C:\\Documents and Settings\\admin\\Desktop\\imp data\\emil id.txt"};//change accordingly
        Multipart multipart = new MimeMultipart();
        multipart.addBodyPart(messageBodyPart1);
        for(int i=0 ; i<filename.length ; i++)
        {
            MimeBodyPart messageBodyPart2 = new MimeBodyPart();
            DataSource source = new FileDataSource(filename[i]);
            messageBodyPart2.setDataHandler(new DataHandler(source));
            messageBodyPart2.setFileName(filename[i]);
            multipart.addBodyPart(messageBodyPart2);
        }
        // both part add into maulti part 
        // set message content
        message.setContent(multipart);
        // Trans port the message 
        Transport transport = session.getTransport("smtp");
        transport.connect(host, from, pass);
        transport.sendMessage(message, message.getAllRecipients());
        transport.close();
    }
    catch(Exception ex)
    {
    ex.printStackTrace();
    }

答案 2 :(得分:-1)

只需使用实际的gmail凭据更改gmailUsername和gmailPass即可。并且还使用您想要的地址更改往返地址。 在这里,我们使用Gmail SSL smtp端口发送邮件。您可以使用自己的邮件服务器详细信息进行更改。

import java.util.*;

import javax.mail.*;

import javax.mail.internet.*;

import javax.activation.*;

/**

Author Mridul Chatterjee

 */

import java.util.Properties;

import javax.mail.Message;

import javax.mail.MessagingException;

import javax.mail.PasswordAuthentication;

import javax.mail.Session;

import javax.mail.Transport;

import javax.mail.internet.InternetAddress;

import javax.mail.internet.MimeMessage;



public class SendMail {

public static void main(String[] args) {

Properties props = new Properties();

props.put(”mail.smtp.host”, “smtp.gmail.com”);

props.put(”mail.smtp.socketFactory.port”, “465″);

props.put(”mail.smtp.socketFactory.class”,

“javax.net.ssl.SSLSocketFactory”);

props.put(”mail.smtp.auth”, “true”);

props.put(”mail.smtp.port”, “465″);

ArrayList fileNames = new ArrayList();

fileNames.add(”C:/Write.txt”);

fileNames.add(”C:/Write1.txt”);

fileNames.add(”C:/Write2.txt”);

fileNames.add(”C:/Write3.txt”);

fileNames.add(”C:/25148.jpg”);



Session session = Session.getDefaultInstance(props,

new javax.mail.Authenticator() {

protected PasswordAuthentication getPasswordAuthentication() {

return new PasswordAuthentication(”gmailUsername”,”gmailPass”);

}

});



try {



Message message = new MimeMessage(session);

message.setFrom(new InternetAddress(”from@no-spam.com”));

message.setRecipients(Message.RecipientType.TO,

InternetAddress.parse(”tomail@mail.com”));

message.setSubject(”Testing Subject”);

message.setText(”Dear Mail Crawler,” +

“nn No spam to my email, please!”);

     //  multipart.addBodyPart(messageBodyPart);



     //  DataSource source = new FileDataSource(filename);

    //   messageBodyPart.setDataHandler(new DataHandler(source));

    //   messageBodyPart.setFileName(filename);

       System.out.println(fileNames.size());

       Multipart multipart = new MimeMultipart();

       BodyPart messageBodyPart = new MimeBodyPart();

       for(int i=0;i            {

                System.out.println(fileNames.get(i));





                messageBodyPart = new MimeBodyPart();

                DataSource source = new FileDataSource((String)fileNames.get(i));

                messageBodyPart.setDataHandler(new DataHandler(source));

                messageBodyPart.setFileName((String)fileNames.get(i));

                multipart.addBodyPart(messageBodyPart);

                //message.setContent(multipart);

            }



       //multipart.addBodyPart(messageBodyPart);

       message.setContent(multipart);



Transport.send(message);



System.out.println(”Mail Sent Successfully….”);



} catch (MessagingException e) {

throw new RuntimeException(e);

}

}

}