Russian Qt Forum

Qt => Работа с сетью => Тема начата: Apktyc от Август 31, 2021, 23:49



Название: [РЕШЕНО] QNetworkAccessManager и MS Exchange
Отправлено: Apktyc от Август 31, 2021, 23:49
Добрый день.

Ни у кого не было попыток задружить этих двух животных?

Пытаюсь отправить письмо через Exchange 13.

Отсюда Get started with EWS client applications (https://docs.microsoft.com/en-us/exchange/client-developer/exchange-web-services/get-started-with-ews-client-applications) взял пример SOAP запроса и после чего пытаюсь выполнить такой код:
Код:
  auto Manager = new QNetworkAccessManager;

  connect(Manager, &QNetworkAccessManager::authenticationRequired, this, [=](QNetworkReply* /*Reply*/, QAuthenticator* Auth){
    qDebug() << "Authentication";
    Auth->setUser("login");
    Auth->setPassword("password");
  });

  connect(Manager, &QNetworkAccessManager::finished, this, [=](QNetworkReply* Reply){
    if (Reply->error() == QNetworkReply::NoError)
    {
      qDebug() << Reply->readAll();
    }
    else
    {
      qDebug() << "Error:" << Reply->errorString();
    }
  });

  QString CreateItemSOAPRequest =
      "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
      "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" \n"
      "               xmlns:m=\"https://schemas.microsoft.com/exchange/services/2006/messages\" \n"
      "               xmlns:t=\"https://schemas.microsoft.com/exchange/services/2006/types\" \n"
      "               xmlns:soap=\"https://schemas.xmlsoap.org/soap/envelope/\">\n"
      "  <soap:Header>\n"
      "    <t:RequestServerVersion Version=\"Exchange2007_SP1\" />\n"
      "  </soap:Header>\n"
      "  <soap:Body>\n"
      "    <m:CreateItem MessageDisposition=\"SendAndSaveCopy\">\n"
      "      <m:SavedItemFolderId>\n"
      "        <t:DistinguishedFolderId Id=\"sentitems\" />\n"
      "      </m:SavedItemFolderId>\n"
      "      <m:Items>\n"
      "        <t:Message>\n"
      "          <t:Subject>Test subject</t:Subject>\n"
      "          <t:Body BodyType=\"HTML\">Simple text test</t:Body>\n"
      "          <t:ToRecipients>\n"
      "            <t:Mailbox>\n"
      "              <t:EmailAddress>*@*.ru</t:EmailAddress>\n"
      "            </t:Mailbox>\n"
      "          </t:ToRecipients>\n"
      "        </t:Message>\n"
      "      </m:Items>\n"
      "    </m:CreateItem>\n"
      "  </soap:Body>\n"
      "</soap:Envelope>\n";

  QNetworkRequest Request = QNetworkRequest(QUrl("https://<servername>/EWS/Exchange.asmx"));
  Request.setHeader(QNetworkRequest::ContentTypeHeader, "text/xml; charset=utf-8");

  Manager->post(Request, CreateItemSOAPRequest.toUtf8());

Авторизация проходит и сервер возвращает: 400 Bad Request

Хотелось бы понять куда копать.

UPD: все упиралось в использовании https в <soap:Envelope>, заменил на http  и все заработало.
Правда что, утро вечера мудренее.


Название: Re: [РЕШЕНО] QNetworkAccessManager и MS Exchange
Отправлено: qtkoder777 от Апрель 25, 2022, 20:47
А можно было бы не писать никакого кода, а использовать зерокодерский инструмент Integromat.