c ++ smtp значение ответа <550, как получить ответ от получателя, когда сервер имеет задержку - PullRequest
0 голосов
/ 03 октября 2018

Я использую небольшую программу в 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 из главного окна проблему .... в главном окне в управлении сигналами Iсделал так:

    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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...