c ++ smtp响应值<550如何在服务器延迟时如何从接收方获取回复

时间:2018-10-03 09:10:32

标签: c++ linux email smtp qt5

我使用Linux Qt5 c ++中的一个小程序,该程序源自“ Qt Simple Mail”项目。我添加了一些空白,我需要输入服务器回复错误的所有电子邮件地址。 据我了解,通常所有这些答复值:220、250、234、235、334、354是仅用于管理消息的服务器响应,所有其他都是不好的答复。错误的答复意味着电子邮件地址无效,发件人的邮件地址被收件人等放置在垃圾邮件文件夹中,等等。我需要将所有这些电子邮件地址保存到文件中。

我的第一个解决方案是这些

else
{
    // something broke.

    QString rsp1 = response;
    QByteArray ba = rsp1.toLatin1();
    const char *c_rsp2 = ba.data();
    state = Close;
    emit status( tr( "Failed to send message" ), tr(c_rsp2));
}

状态最初是一个只有一个值的信号,我添加了另一个,第二个QString来从主​​窗口的QMessageBox发出信号……在信号管理的主窗口上,我这样做是:

    else if ((stat == "Failed to send message") && isCvs&& user_mail.isEmpty() && (counter < (user_mail.size() - 1)))
{

    QString FakeAdress = user_mail[counter];
    ui->indirizziNO->appendPlainText(FakeAdress);

    QFile MailError("/home/con/MAR/MailError.txt");
    if(!MailError.open(QIODevice::Append)){
        qDebug() << " error file not exist";
        return;
    }
    else{
        QTextStream out(&MailError);
            out << user_mail[counter]+"\n\n";
            MailError.flush();
            MailError.close();
    }

    counter++;
    QString sno = QString::number(counter);
    ui->ContInvi->setText(sno);
    QMessageBox *mbox3 = new QMessageBox();
    mbox3->setWindowTitle(tr("Messages Sender"));
    mbox3->setText("Unexpected reply from SMTP server:\n\n" + err);
    mbox3->show();
    QTimer::singleShot(3000, mbox3, SLOT(hide()));
    QTimer::singleShot(15000, this, SLOT(sendMail()));
}

这些工作...但是如果服务器有一些延迟,则该机制将无法正常工作,并且某些邮件不会保存到MailError.txt中。保存在文件中...否则保存。

有没有办法拦截较晚的回复?

很明显,我不太了解邮件服务器的响应机制,所以我不知道该去哪里获取信息来解决问题。

谢谢您的指点。

bkt

0 个答案:

没有答案