У меня есть 2 адреса электронной почты, и я хочу перенаправлять (автоматически пересылать) все свои письма с одного адреса электронной почты на другой. К сожалению, эта функция в моем почтовом клиенте перестала работать, и я хотел создать небольшое консольное приложение, которое будет проверять мою электронную почту и автоматически пересылать ее каждые 10 минут.
Я начал разработку консольного приложения на Java с использованием Java Mail API, но у меня возникла проблема с установкой соответствующего заголовка FROM. Когда я устанавливаю исходный адрес электронной почты FROM и пытаюсь отправить электронное письмо, SMTP выдает и исключение: SMTP mail FROM does not match authenticated user name
.
Это кажется логичным, потому что таким образом я могу подделать отправителей адресов электронной почты, но я не хочу, чтобы электронные письма приходили на другие электронные письма, как будто они были отправлены мной. Это необходимо по нескольким причинам:
Я добился этого в контактной форме на своем веб-сайте с помощью PHP, но я не знаю, как это сделать на Java.
Постараюсь объяснить ситуацию проще.
Я отправляю 2 письма: [email protected]
и [email protected]
Теперь письмо приходит с [email protected]
на [email protected]
Я хочу переслать письмо от [email protected]
к [email protected]
, но когда письмо приходит на [email protected]
в заголовке ОТ, я хочу видеть, что оно пришло от [email protected]
(НЕ от [email protected]
)
Мой вопрос: возможно ли это, и если да, то как я могу установить заголовок FROM в качестве исходного отправителя.
Это мой код:
public class ForwardMailService {
public static void forward() {
String popHost = "pop.a.com";
String popPort = "110"; // 995 SSL
String imapHost = "imap.a.com";
String imapPort = "143"; // 993 SSL
String smtpHost = "smtp.a.com";
String smtpPort = "25";
String user = "USERNAME";
String password = "PASSWORD";
Properties properties = new Properties();
properties.put("mail.store.protocol", "imap");
properties.put("mail.imap.host", imapHost);
properties.put("mail.imap.port", imapPort);
properties.put("mail.imap.starttls.enable", "true");
properties.put("mail.smtp.auth", "true");
properties.put("mail.smtp.host", smtpHost);
properties.put("mail.smtp.port", smtpPort);
Session session = Session.getDefaultInstance(properties);
try {
Store store = session.getStore("imap");
store.connect(imapHost, user, password);
Folder folder = store.getFolder("inbox");
folder.open(Folder.READ_ONLY);
SearchTerm searchTerm = new SentDateTerm(ComparisonTerm.GE, new Date());
Message[] messages = folder.search(searchTerm);
if (messages.length != 0) {
for(Message message : messages) {
String from = InternetAddress.toString(message.getFrom());
String replyTo = InternetAddress.toString(message.getReplyTo());
String to = InternetAddress.toString(message.getRecipients(Message.RecipientType.TO));
String subject = message.getSubject();
Date sentDate = message.getSentDate();
Message forward = new MimeMessage(session);
forward.setRecipients(Message.RecipientType.TO, InternetAddress.parse("[email protected]));
forward.setSubject("Fwd: " + message.getSubject());
forward.setFrom(new InternetAddress(from));
forward.setReplyTo(InternetAddress.parse(replyTo));
MimeBodyPart messageBodyPart = new MimeBodyPart();
Multipart multipart = new MimeMultipart();
messageBodyPart.setContent(message, "message/rfc822");
multipart.addBodyPart(messageBodyPart);
forward.setContent(multipart);
forward.saveChanges();
Transport transport = session.getTransport("smtp");
try {
transport.connect(smtpHost, user, password);
transport.sendMessage(forward, forward.getRecipients(Message.RecipientType.TO));
} catch(Exception ex) {
ex.printStackTrace();
} finally {
transport.close();
}
}
}
folder.close(false);
store.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
Заранее спасибо.
От вашего почтового сервера полностью зависит, позволит ли он отправлять почту на [email protected] так, чтобы она не выглядела как отправленная с [email protected]. Большинство серверов этого не допустят.
Более простое решение — прочитать сообщение из папки «Входящие» [email protected] и использовать Folder.appendMessages, чтобы добавить его в папку «Входящие» [email protected], вместо использования Transport.sendMessage для повторной отправки.
Спасибо за Ваш ответ. Я думал сделать то же самое. Я попробую это позже сегодня и вернусь к вам, если это сработает.