Проблема с подключением к Python почтовому серверу из Java приложения Camel - PullRequest
0 голосов
/ 29 апреля 2020

У меня есть простой почтовый сервер, реализованный с использованием пакета Python language aiosmtpd (https://github.com/aio-libs/aiosmtpd). У меня также есть приложение Apache Camel с маршрутом, который пытается получить почту с сервера.

Мне удалось успешно отправить почту на сервер, и она сохраняется в каталоге. Однако я сталкиваюсь с проблемой при попытке получить почту с сервера. Сообщение об ошибке из приложения Camel:

2020-04-29 10:51:54.476  WARN 17916 --- [/localhost:8025] o.a.c.c.m.MailConsumer                   : Consumer Consumer[imap://localhost:8025?delay=10000&unseen=true] failed polling endpoint: imap://localhost:8025?delay=10000&unseen=true. Will try again at next poll. Caused by: [javax.mail.AuthenticationFailedException - failed to connect, no user name specified?]

javax.mail.AuthenticationFailedException: failed to connect, no user name specified?
    at javax.mail.Service.connect(Service.java:373) ~[jakarta.mail-1.6.4.jar:1.6.4]
    at org.apache.camel.component.mail.MailConsumer.ensureIsConnected(MailConsumer.java:568) ~[camel-mail-3.1.0.jar:3.1.0]
    at org.apache.camel.component.mail.MailConsumer.poll(MailConsumer.java:126) ~[camel-mail-3.1.0.jar:3.1.0]
    at org.apache.camel.support.ScheduledPollConsumer.doRun(ScheduledPollConsumer.java:187) [camel-support-3.1.0.jar:3.1.0]
    at org.apache.camel.support.ScheduledPollConsumer.run(ScheduledPollConsumer.java:106) [camel-support-3.1.0.jar:3.1.0]
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:1.8.0_241]
    at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) [?:1.8.0_241]
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180) [?:1.8.0_241]
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294) [?:1.8.0_241]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_241]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_241]
    at java.lang.Thread.run(Thread.java:748) [?:1.8.0_241]

Почтовый сервер не отображает видимых сообщений. Я не знаю, поддерживает ли он какой-то журнал. Когда почта отправляется, сервер отображает много информации о сообщении, полученном от отправителя, поэтому он определенно отображает некоторую информацию.

Я понятия не имею, каким должно быть имя пользователя. Кроме того, требуется ли пользователю пароль? Я не могу найти на сайте aiosmtpd информацию, касающуюся пользователя или пароля.

Существует ли ожидание, что на почтовом сервере есть набор признанных / авторизованных пользователей, и что мне нужно указать один из их? Есть ли такая вещь, как не требующий имя пользователя / пароль?

Вот маршрут верблюда для справки:

<route id="mail-receive">
  <from
    uri="imap://{{mail-client.server.host}}:{{mail-client.server.port}}?unseen=true&amp;delay=10000" />
  <log loggingLevel="INFO" message="start - mail-receive" />
  <to uri="file:{{mail-client.receive.dest-dir}}" />
  <log loggingLevel="INFO" message="end - mail-receive" />
</route>

А вот почтовый сервер python script:

server.py:

#! /usr/bin/python3

import os
import asyncio
import logging
import tempfile

from aiosmtpd.controller import Controller
from aiosmtpd.handlers import Mailbox


async def mailbox_controller(dir):
    cont = Controller(Mailbox(dir), hostname='', port=8025)
    cont.start()


def main():
    logging.basicConfig(level=logging.DEBUG)

    temp_dir = tempfile.TemporaryDirectory()
    maildir_path = os.path.join(temp_dir.name, 'maildir')

    loop = asyncio.get_event_loop()
    loop.create_task(mailbox_controller(dir=maildir_path))

    try:
        loop.run_forever()
    except KeyboardInterrupt:
        logging.info('Shutting down')


if __name__ == '__main__':
    main()

1 Ответ

1 голос
/ 30 апреля 2020

aiosmtpd - SMTP-сервер. Протокол SMTP используется для отправки, ретрансляции или пересылки сообщений, но вы не можете использовать его для получения сообщений. Вам необходимо объединить приложение почтового ящика с какой-либо реализацией IMAP или POP3.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...