void clEMailWidget::OnSend()
{
m_SMTPServer = m_pSMTPServerEdit->text();
m_MailFrom = m_pMailFromEdit->text();
m_MailTo = m_pMailToEdit->text();
m_Login = m_pLoginEdit->text();
m_Password = m_pPasswordEdit->text();
m_Subject = m_pSubjectEdit->text();
m_MailBody = m_pBodyEdit->document()->toPlainText();
pMAIN_WND->m_IniFile.SetMailInfo(m_SMTPServer, m_MailFrom, m_MailTo, m_Login);
QApplication::setOverrideCursor(Qt::WaitCursor);
ViewStatus("Connecting..." );
m_State = Init;
m_Socket.abort();
m_Socket.connectToHost(m_SMTPServer , 25, QIODevice::ReadWrite);
if( !m_Socket.waitForConnected(10000) )
{
QString Err = m_Socket.errorString();
ViewStatus(Err);
QApplication::restoreOverrideCursor();
}
}
void clEMailWidget::OnConnected()
{
ViewStatus( tr( "Connected to %1" ).arg( m_Socket.peerName() ) );
}
void clEMailWidget::OnReadyRead()
{
if( !m_Socket.canReadLine() )
return;
QByteArray Arr;
QString responseLine;
do
{
responseLine = m_Socket.readLine();
m_Response += responseLine;
}
while( m_Socket.canReadLine() && responseLine[3] != ' ' );
responseLine.truncate(3);
if( m_State == Auth )
{
if( m_Response.indexOf("AUTH") < 0 )
m_State = Mail;
}
if( m_State == Init && responseLine[0] == '2' )
{
m_Stream << "EHLO there\r\n" << flush;
m_State = Auth;
}
else if( m_State == Auth && responseLine[0] == '2' )
{
m_Stream << "AUTH LOGIN\r\n" << flush;
m_State = AuthCheckLogin;
}
else if( m_State == AuthCheckLogin && responseLine[0] == '3' )
{
ViewStatus("Authorization...");
QByteArray LoginArr;
LoginArr.append(m_Login);
Base64(LoginArr, Arr);
QString Str(Arr);
m_Stream << Str << "\r\n" << flush;
m_State = AuthCheckPassword;
}
else if( m_State == AuthCheckPassword && responseLine[0] == '3' )
{
QByteArray PasswordArr;
PasswordArr.append(m_Password);
Base64(PasswordArr, Arr);
QString Str(Arr);
m_Stream << Arr << "\r\n" << flush;
m_State = Mail;
}
else if( m_State == Mail && responseLine[0] == '2' )
{
m_Stream << "MAIL FROM: <" << m_MailFrom << ">\r\n" << flush;
m_State = Rcpt;
}
else if( m_State == Rcpt && responseLine[0] == '2' )
{
m_Stream << "RCPT TO: <" << m_MailTo << ">\r\n" << flush;
m_State = Data;
}
else if( m_State == Data && responseLine[0] == '2' )
{
m_Stream << "DATA\r\n" << flush;
m_State = Body;
}
else if( m_State == Body && responseLine[0] == '3' )
{
ViewStatus(tr("Sending data..."));
QString AttachSection;
std::vector<CBPAPage*> Pages;
for( int i = 0; i < m_pDoc->GetPageCount(); i++ )
Pages.push_back(m_pDoc->GetPage(i));
BuildAttachSection(Pages, AttachSection);
QString Msg = AttachSection;
m_Stream << Msg << "\r\n.\r\n" << flush;
m_State = Quit;
}
else if( m_State == Quit && responseLine[0] == '2' )
{
m_Stream << "QUIT\r\n" << flush;
m_State = Close;
ViewStatus("Mail sent successfully");
QApplication::restoreOverrideCursor();
}
else if( m_State == Close )
{
return;
QApplication::restoreOverrideCursor();
}
else
{
//something wrong
ViewStatus(m_Response);
m_State = Close;
QApplication::restoreOverrideCursor();
}
m_Response = "";
}
void clEMailWidget::OnClose()
{
reject();
}