|
|
@ -135,7 +135,9 @@ void SMTP::sendMessage(void)
|
|
|
|
finished = false;
|
|
|
|
finished = false;
|
|
|
|
state = IN;
|
|
|
|
state = IN;
|
|
|
|
writeString = TQString::fromLatin1("helo %1\r\n").arg(domainName);
|
|
|
|
writeString = TQString::fromLatin1("helo %1\r\n").arg(domainName);
|
|
|
|
write(sock->socket(), writeString.ascii(), writeString.length());
|
|
|
|
if (write(sock->socket(), writeString.ascii(), writeString.length()) < 0) {
|
|
|
|
|
|
|
|
// Error
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if(connected){
|
|
|
|
if(connected){
|
|
|
|
kdDebug() << "enabling read on sock...\n" << endl;
|
|
|
|
kdDebug() << "enabling read on sock...\n" << endl;
|
|
|
@ -264,30 +266,54 @@ void SMTP::processLine(TQString *line)
|
|
|
|
state = IN;
|
|
|
|
state = IN;
|
|
|
|
writeString = TQString::fromLatin1("helo %1\r\n").arg(domainName);
|
|
|
|
writeString = TQString::fromLatin1("helo %1\r\n").arg(domainName);
|
|
|
|
kdDebug() << "out: " << writeString << endl;
|
|
|
|
kdDebug() << "out: " << writeString << endl;
|
|
|
|
write(sock->socket(), writeString.ascii(), writeString.length());
|
|
|
|
if (write(sock->socket(), writeString.ascii(), writeString.length()) < 0) {
|
|
|
|
|
|
|
|
// Error
|
|
|
|
|
|
|
|
state = CERROR;
|
|
|
|
|
|
|
|
kdDebug() << "smtp error (write failed)" << endl;
|
|
|
|
|
|
|
|
socketClose(sock);
|
|
|
|
|
|
|
|
emit error(COMMAND);
|
|
|
|
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case GOODBYE: //221
|
|
|
|
case GOODBYE: //221
|
|
|
|
state = QUIT;
|
|
|
|
state = QUIT;
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case SUCCESSFUL://250
|
|
|
|
case SUCCESSFUL://250
|
|
|
|
switch(state){
|
|
|
|
switch(state) {
|
|
|
|
case IN:
|
|
|
|
case IN:
|
|
|
|
state = READY;
|
|
|
|
state = READY;
|
|
|
|
writeString = TQString::fromLatin1("mail from: %1\r\n").arg(senderAddress);
|
|
|
|
writeString = TQString::fromLatin1("mail from: %1\r\n").arg(senderAddress);
|
|
|
|
kdDebug() << "out: " << writeString << endl;
|
|
|
|
kdDebug() << "out: " << writeString << endl;
|
|
|
|
write(sock->socket(), writeString.ascii(), writeString.length());
|
|
|
|
if (write(sock->socket(), writeString.ascii(), writeString.length()) < 0) {
|
|
|
|
|
|
|
|
// Error
|
|
|
|
|
|
|
|
state = CERROR;
|
|
|
|
|
|
|
|
kdDebug() << "smtp error (write failed)" << endl;
|
|
|
|
|
|
|
|
socketClose(sock);
|
|
|
|
|
|
|
|
emit error(COMMAND);
|
|
|
|
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case READY:
|
|
|
|
case READY:
|
|
|
|
state = SENTFROM;
|
|
|
|
state = SENTFROM;
|
|
|
|
writeString = TQString::fromLatin1("rcpt to: %1\r\n").arg(recipientAddress);
|
|
|
|
writeString = TQString::fromLatin1("rcpt to: %1\r\n").arg(recipientAddress);
|
|
|
|
kdDebug() << "out: " << writeString << endl;
|
|
|
|
kdDebug() << "out: " << writeString << endl;
|
|
|
|
write(sock->socket(), writeString.ascii(), writeString.length());
|
|
|
|
if (write(sock->socket(), writeString.ascii(), writeString.length()) < 0) {
|
|
|
|
|
|
|
|
// Error
|
|
|
|
|
|
|
|
state = CERROR;
|
|
|
|
|
|
|
|
kdDebug() << "smtp error (write failed)" << endl;
|
|
|
|
|
|
|
|
socketClose(sock);
|
|
|
|
|
|
|
|
emit error(COMMAND);
|
|
|
|
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case SENTFROM:
|
|
|
|
case SENTFROM:
|
|
|
|
state = SENTTO;
|
|
|
|
state = SENTTO;
|
|
|
|
writeString = TQString::fromLatin1("data\r\n");
|
|
|
|
writeString = TQString::fromLatin1("data\r\n");
|
|
|
|
kdDebug() << "out: " << writeString << endl;
|
|
|
|
kdDebug() << "out: " << writeString << endl;
|
|
|
|
write(sock->socket(), writeString.ascii(), writeString.length());
|
|
|
|
if (write(sock->socket(), writeString.ascii(), writeString.length()) < 0) {
|
|
|
|
|
|
|
|
// Error
|
|
|
|
|
|
|
|
state = CERROR;
|
|
|
|
|
|
|
|
kdDebug() << "smtp error (write failed)" << endl;
|
|
|
|
|
|
|
|
socketClose(sock);
|
|
|
|
|
|
|
|
emit error(COMMAND);
|
|
|
|
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case DATA:
|
|
|
|
case DATA:
|
|
|
|
state = FINISHED;
|
|
|
|
state = FINISHED;
|
|
|
@ -311,7 +337,13 @@ void SMTP::processLine(TQString *line)
|
|
|
|
writeString += messageBody;
|
|
|
|
writeString += messageBody;
|
|
|
|
writeString += TQString::fromLatin1(".\r\n");
|
|
|
|
writeString += TQString::fromLatin1(".\r\n");
|
|
|
|
kdDebug() << "out: " << writeString;
|
|
|
|
kdDebug() << "out: " << writeString;
|
|
|
|
write(sock->socket(), writeString.ascii(), writeString.length());
|
|
|
|
if (write(sock->socket(), writeString.ascii(), writeString.length()) < 0) {
|
|
|
|
|
|
|
|
// Error
|
|
|
|
|
|
|
|
state = CERROR;
|
|
|
|
|
|
|
|
kdDebug() << "smtp error (write failed)" << endl;
|
|
|
|
|
|
|
|
socketClose(sock);
|
|
|
|
|
|
|
|
emit error(COMMAND);
|
|
|
|
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case ERROR: //501
|
|
|
|
case ERROR: //501
|
|
|
|
state = CERROR;
|
|
|
|
state = CERROR;
|
|
|
|