У нас есть приложение Java, которое отправляет электронную почту через наши корпоративные учетные записи электронной почты, предоставленные Google. В большинстве случаев это работает нормально, но когда у нас есть неправильный адрес электронной почты, мы никогда не получим ответное письмо с возвратом, независимо от того, куда мы его отправили.
Однако, если я вхожу в ту же учетную запись электронной почты и отправляю на тот же неправильный адрес электронной почты, я получаю сообщение о недоставке.
Почему я не получаю сообщение о недоставке при программной отправке электронной почты?
Вот наш код, который отправляет электронное письмо:
private void sendMessageImpl(String toAddresses, String replyToAddress, String subject, String body, int failedAttempts, long startTime) throws MessagingException {
final Properties properties = getMailProperties();
String fromAddress = properties.getProperty("mail.from");
Session session = getSession();
Transport transport = null;
boolean tryingToConnect = false;
try {
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(fromAddress));
toAddresses = toAddresses.replaceAll(";", ",");
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(toAddresses));
message.setSubject(subject);
message.setText(body);
// Send the message
transport = session.getTransport(message.getAllRecipients()[0]);
tryingToConnect = true;
transport.connect();
tryingToConnect = false;
transport.sendMessage(message, message.getAllRecipients());
transport.close();
transport = null;
} catch (NullPointerException e) {
Logger.getLogger(Mail.class.getName()).log(Level.SEVERE, "Fail to send email to " + toAddresses+". Subject: "+subject+"\nContents: "+body, e);
throw new MessagingException("Mail Failure");
} catch (MessagingException e) {
Logger.getLogger(Mail.class.getName()).log(Level.SEVERE, "Fail to send email to " + toAddresses+". Subject: "+subject+"\nContents: "+body, e);
} finally {
if (transport != null) {
try {
transport.close();
} catch (MessagingException e) {
Logger.getLogger(Mail.class.getName()).log(Level.SEVERE, "Failed to close transport after earlier error left it open. ", e);
}
}
}
}
Адрес отправителя - это псевдоним группы, который отправляется нескольким людям. Это адрес электронной почты нашей службы поддержки, поэтому support @ <mycompany> .com.
Из Javadoc: «Соответствующее событие TransportEvent, указывающее статус доставки, доставлено любому TransportListener, зарегистрированному на этом транспорте» - можете ли вы зарегистрировать TransportListener для перехвата любой информации о состоянии?
@JimGarrison Это стоит взглянуть.




Какое значение действительный у
fromAddress?