0

次のコードを使用してメールを送信しています

public void send() throws MessagingException
    {
        // create some properties and get the Session
        Properties props = new Properties();
        props.put("mail.smtp.host", this.getSMTPServer());

        if( this.getDebugMode() )
            props.put("mail.debug", "true");
        else
            props.put("mail.debug", "false");
        //Comment by Sandip for FIRSTMEDIA-578
        //props.put("mail.smtp.auth", "true");

        Session session = Session.getInstance(props, null);

        MimeMessage mail = new MimeMessage(session);

        //Set Mailer string in Header.. 
        mail.setHeader("X-Mailer", this.getMailer() );

        //Set TO Recipients, toList would be of comma separated if multiple addresses are there
        if( this.getTo() != null )
        {
            StringTokenizer st = new StringTokenizer(this.getTo(),",");
            InternetAddress[] recList = new InternetAddress[st.countTokens()];

            for (int r = 0; st.hasMoreTokens(); r++)
                recList[r] = new InternetAddress(st.nextToken().trim());          

            if(recList.length != 0 )
            {
                mail.setRecipients(Message.RecipientType.TO, recList);
            }

        }           


        //Set CC Recipients, bccList would be of comma separated if multiple addresses are there
        if( this.getCc() != null )
        {
            StringTokenizer st1 = new StringTokenizer(this.getCc(),",");
            InternetAddress[] copyList = new InternetAddress[st1.countTokens()];
            for (int c = 0; st1.hasMoreTokens(); c++)
                copyList[c] = new InternetAddress(st1.nextToken().trim());          

            if(copyList.length != 0 )
                mail.setRecipients(Message.RecipientType.CC, copyList);
        }           


        //Set BCC Recipients, bccList would be of comma separated if multiple addresses are there
        if( this.getBcc() != null )
        {
            StringTokenizer st2 = new StringTokenizer(this.getBcc(),",");
            InternetAddress[] bcopyList = new InternetAddress[st2.countTokens()];
            for (int c = 0; st2.hasMoreTokens(); c++)
                bcopyList[c] = new InternetAddress(st2.nextToken().trim());          

            if(bcopyList.length != 0 )
                mail.setRecipients(Message.RecipientType.BCC, bcopyList);
        }   


        // Create a mime message
        mail.setFrom(new InternetAddress(this.getFrom()));
        mail.setSubject(subject);


        //create mulitple parts to added
        Multipart mp = new MimeMultipart();

        MimeBodyPart mbp1 = new MimeBodyPart();

        //messageMIME can be "text/plain" or "text/html" or anything related to mime
        mbp1.setContent(this.getMsgText(),this.getContentType());
        mp.addBodyPart(mbp1);

        //Adding attachments to mail
        if( this.attachmentList != null )
        {
            for(int i=0; i < this.attachmentList.size() ; i++ )
            {
                MimeBodyPart mbp = new MimeBodyPart();
                FileDataSource fds = new FileDataSource((File)this.attachmentList.elementAt(i));
                mbp.setDataHandler(new DataHandler(fds));
                mbp.setFileName(fds.getName());
                mp.addBodyPart(mbp);
            }
        }

        mail.setContent(mp);
        mail.saveChanges();

        mail.setSentDate(new Date());

        // Send the message
        Transport trans = session.getTransport("smtp");
        trans.connect(this.getSMTPServer(), this.getSMTPUsername(), this.getSMTPPassword());
        trans.sendMessage(mail, mail.getAllRecipients());
        trans.close();

    }

これにより、受信者リストから1人の受信者へのメール送信が失敗すると、すべての受信者のメール送信が失敗します。

リストからすべての正しいメール受信者にメールを送信するために必要な変更はありますか?

4

1 に答える 1

0

ドキュメントを確認すると、メッセージの送信には次のように表示されます。「指定されたアドレスのリストにメッセージを送信します。配信ステータスを示す適切なTransportEventが、このトランスポートに登録されているすべてのTransportListenerに配信されます。また、いずれかのアドレスが無効な場合、SendFailedExceptionメッセージが有効なアドレスに正常に送信されるかどうかは、トランスポートの実装によって異なります。」

次のことを試すことができます。

  • コードで1つずつ送信するか、
  • 例外をキャッチして、送信されていない有効なアドレスに送信されていることをSendFailedException確認 できます。getValidUnsentAddresses

私は本当に2番目のものが好きです:)

送信された失敗した例外を確認する

于 2012-08-23T07:33:46.533 に答える