【问题标题】:mail is sent successfully or not by java mail apijava mail api发送邮件成功与否
【发布时间】:2017-06-01 11:53:19
【问题描述】:

我在下面编写了一个程序来通过 java 邮件 api 发送邮件,现在我的查询是处理特殊情况,还可以说如果邮件没有发送,那么我必须做一些事情,如果邮件发送我必须在那个 cas 中做一些其他的事情,现在请告知 java mail api 在发送邮件购买时是否向我们证明了任何参数,我们可以检查邮件是否发送成功,因为我在我的程序中启用了调试

emailSession.setDebug(true);

请告知java mail api返回的参数是哪个,我们可以通过它来检查邮件是否发送成功

下面是我简单的java mail api程序

public class EmailTest {

    public static void main(String[] args) {

        String mailSmtpHost = "cakelycakes.com";

        String mailTo = "bigcakes@cakelycakes.com";
        String mailCc = "littlecakes@cakelycakes.com";
        String mailFrom = "me@here.there.everywhere";
        String mailSubject = "Email from Java";
        String mailText = "This is an email from Java";

        sendEmail(mailTo, mailCc, mailFrom, mailSubject, mailText, mailSmtpHost);
    }

    public static void sendEmail(String to, String cc, String from, String subject, String text, String smtpHost) {
        try {
            Properties properties = new Properties();
            properties.put("mail.smtp.host", smtpHost);
            Session emailSession = Session.getDefaultInstance(properties);

            Message emailMessage = new MimeMessage(emailSession);
            emailMessage.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
            emailMessage.addRecipient(Message.RecipientType.CC, new InternetAddress(cc));
            emailMessage.setFrom(new InternetAddress(from));
            emailMessage.setSubject(subject);
            emailMessage.setText(text);

            emailSession.setDebug(true);

            Transport.send(emailMessage);
        } catch (AddressException e) {
            e.printStackTrace();
        } catch (MessagingException e) {
            e.printStackTrace();
        }
    }
}

【问题讨论】:

    标签: java jakarta-mail


    【解决方案1】:
    【解决方案2】:

    好吧,有一种方法可以发送所有电子邮件。

    前-

          //create the POP3 store object and connect with the pop server
      Store store = emailSession.getStore("pop3s");
    
      store.connect(host, user, password);
    
      //create the folder object and open it
      Folder emailFolder = store.getFolder("INBOX");
      emailFolder.open(Folder.READ_ONLY);
    
      // retrieve the messages from the folder in an array and print it
      Message[] messages = emailFolder.getMessages();
      System.out.println("messages.length---" + messages.length);
    
      for (int i = 0, n = messages.length; i < n; i++) {
         Message message = messages[i];
         System.out.println("---------------------------------");
         System.out.println("Email Number " + (i + 1));
         System.out.println("Subject: " + message.getSubject());
         System.out.println("From: " + message.getFrom()[0]);
         System.out.println("Text: " + message.getContent().toString());
    
      }
    
      //close the store and folder objects
      emailFolder.close(false);
      store.close();
    
      } catch (NoSuchProviderException e) {
         e.printStackTrace();
      } catch (MessagingException e) {
         e.printStackTrace();
      } catch (Exception e) {
         e.printStackTrace();
      }
    

    }

    您可以通过比较邮件的内容来检查messag对象是否发送了邮件。

    希望对你有帮助。

    【讨论】:

    • 谢谢,但是否有其他选择,请告知,因为我正在寻找参数本身,例如,如果邮件是由我的 SMTP 服务器发送的,那么它应该设置一些值,如果邮件不是由我的 SMTP 发送服务器本身由于任何技术原因,那么它应该设置一些值
    【解决方案3】:

    我不确定这是您需要的。但是你可以像这样检查 SMTP 服务器的返回码:

    // get your configuration (host, port, user, pwd)
    ...
    // initialize your message
    ...
    
    SMTPTransport transport = (SMTPTransport) session.getTransport("smtp");
    transport.connect(host, port, user, pwd);
    transport.sendMessage(message, message.getAllRecipients());
    // you can get SMTP return code here
    int code = transport.getLastReturnCode();
    

    【讨论】:

    • 据我了解,发送邮件后立即获取代码的目的是为了能够确定邮件发送是否顺利。我已经测试了这一行,并意识到返回的 SMTP 代码在两种情况下都是 250:当电子邮件收件人正确时,当它不正确时,它似乎反映了另一种不同于前一封电子邮件的传递状态的状态。
    猜你喜欢
    • 1970-01-01
    • 2016-02-18
    • 2020-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多