2014-12-28 2 views
0

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

Сервера

package example; 

import org.subethamail.smtp.server.SMTPServer; 

public class EmailServer { 

    public static void main(String[] args) { 
     MyMessageHandlerFactory myFactory = new MyMessageHandlerFactory(); 
     SMTPServer smtpServer = new SMTPServer(myFactory); 
     smtpServer.setPort(25000); 
     smtpServer.start(); 
    } 
} 

выходного сервер

пробег: [главный] INFO org.subethamail.smtp.server.SMTPServer - SMTP-сервер *: 25000 начиная [орг. subethamail.smtp.server.ServerThread *: 25000] INFO org.subethamail.smtp.server.ServerThread - SMTP-сервер *: 25000 начато

клиент

package example; 

import java.io.IOException; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import org.subethamail.smtp.client.*; 

public class EmailClient { 

    public static void main(String[] args) { 
     try { 
      SMTPClient sc = new SMTPClient(); 
      sc.close(); 
      sc.connect("localhost", 25000); 
      sc.sendReceive("test"); 
     } catch (IOException ex) { 
      Logger.getLogger(EmailClient.class.getName()).log(Level.SEVERE, null, ex); 
     } 

    } 

} 

выход клиента

выполнения: BUILD SUCCESSFUL (общее время: 0 секунд)

версия 3.1.7 от https://code.google.com/p/subethasmtp/downloads/list

Сервер требует MyMessageHandlerFactory который я скопированный из: https://code.google.com/p/subethasmtp/wiki/SimpleExample

ответ

0

ОК, давайте проверить исходный код (всегда хорошая идея) и посмотреть, что происходит.

Вы присылаете «тест» через

SMTPClient sc; 
sc.sendReceive("test"); // which is actually sent to your SMTPServer as "test\r\n" 

Теперь, учитывая, что это новый SMTP разговор (см RFC5321 за все, что вы всегда хотели знать, но боялись спросить о таких вещах) и "тест "не является действительной командой VERB в этот момент разговора, вы ожидаете увидеть ошибку, возвращаемую sendReceive().

Но так как вы не обращая внимания на SMTPClient.Response#75 вернулся из того, что должно было

Response resp=SMTPClient.sendReceive() 

вы пропускаете как

  • resp.code (который я уверен, что это 500 - Permanent Negative Completion reply/Syntax - см RFC выше) и
  • resp.message, описывающий причину, по которой ваша команда не была заполнена

оба из которых возвращаются из CommandHandler#93.

+0

О, и в отношении вашего 'IOException' try/catch транзакция не прерывается.Скорее, он послушно возвращает достаточно информации для того, чтобы сортировать вашу проблему, если вы решите следить за ней. :-) –

+0

Итак, я новичок в этой библиотеке и никогда не касался ее раньше. Чтобы мой сервер распечатывал электронную почту от клиента, вы могли бы рассказать мне, какие основные изменения на уровне кода необходимо сделать? – ThreaT

+0

Просто после того, как у вас появился шанс заглянуть в мой предыдущий комментарий? – ThreaT

Смежные вопросы