我正在尝试为发送电子邮件的组件设置一个简单的测试。在测试中,我想使用 POP3 来验证电子邮件是否已发送。在测试期间,所有这些都将在安全的机器上运行,因此我不需要身份验证或 SSL。
我使用默认配置在我的 ubuntu docker 容器中设置了 postfix
。我能够成功发送电子邮件,但是当我尝试使用 Java 客户端检索电子邮件时,出现异常:
Exception in thread "main" javax.mail.AuthenticationFailedException: EOF on socket
就像我提到的,我不需要身份验证,那么如何在没有 AuthenticationFailedException
的情况下连接到 POP3 收件箱?
public static void main(final String[] args) throws MessagingException {
final Session session = Session.getDefaultInstance(new Properties(), null);
final Store store = session.getStore("pop3");
store.connect("localhost", 10110, "root", "");
final Folder inbox = store.getFolder("inbox");
inbox.open(Folder.READ_ONLY);
final Message[] messages = inbox.getMessages();
for (final Message message : messages) {
System.out.println(message.getReceivedDate());
System.out.println(message.getSubject());
}
inbox.close(true);
store.close();
}
FROM ubuntu:20.04
ENV DEBIAN_FRONTEND noninteractive
RUN apt-get update && \
apt-get install -y \
postfix
COPY start_postfix.sh /
ENTRYPOINT /bin/bash /start_postfix.sh
postconf -e "myhostname = my.testserver.com"
postfix start
POSTFIX_SMTP_PORT=10025
POSTFIX_POP3_PORT=10110
docker run \
--name email-test \
-d \
-p $POSTFIX_SMTP_PORT:25 -p $POSTFIX_POP3_PORT:110 \
email-test-image /start_servers.sh
public static void main(final String[] args) throws MessagingException {
final Session session = Session.getDefaultInstance(new Properties(), null);
final Store store = session.getStore("pop3");
store.connect("localhost", 10110, "root", "");
final Folder inbox = store.getFolder("inbox");
inbox.open(Folder.READ_ONLY);
final Message[] messages = inbox.getMessages();
for (final Message message : messages) {
System.out.println(message.getReceivedDate());
System.out.println(message.getSubject());
}
inbox.close(true);
store.close();
}