我使用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