I'm trying to create an email in the drafts folder on Outlook/Office 365. The problem is that the server keeps resetting the connection. Sometimes the code works, other times it causes an exception with either the message "10054:Connection reset by peer" or "10053:Software caused connection abort".
The errors seem to be dependent on the size of the attachment. Larger than 500k is almost always an error, Less than 100k is usually fine. A file of approx 500k is about 50:50 whether it will succeed or not. I'm fairly sure it's not the content of the attachment as the same file will sometimes work, sometimes fail, but its size dictates the likelihood of failure. If it succeeds, then it all looks fine on the server.
The code seems to work fine on gmail, it just has problems on outlook/office 365 (& hotmail). I'm using the latest openssl libs from Fulgan.
Can anyone advise?
bool SendToOutlook365Drafts()
{
TIdMessage *Message = new TIdMessage(NULL);
TIdMessageBuilderHtml *Builder = new TIdMessageBuilderHtml;
Builder->PlainText->Text = "plain text goes here";
Builder->Html->Text = "HTML goes here";
Builder->Attachments->Add("S:\\test.zip");
Builder->FillMessage(Message);
Message->Flags << mfDraft;
Message->From->Text = IMAPUsername;
TIdSSLIOHandlerSocketOpenSSL *SSLHandler = new TIdSSLIOHandlerSocketOpenSSL(NULL);
SSLHandler->SSLOptions->Method = sslvTLSv1_2;
SSLHandler->SSLOptions->SSLVersions << sslvTLSv1_2;
SSLHandler->SSLOptions->SSLVersions << sslvTLSv1_1;
SSLHandler->SSLOptions->SSLVersions << sslvTLSv1; // Allow all TLS methods
SSLHandler->SSLOptions->SSLVersions << sslvSSLv3;
SSLHandler->SSLOptions->SSLVersions << sslvSSLv23;
SSLHandler->SSLOptions->SSLVersions << sslvSSLv2; // Allow all SSL methods
SSLHandler->SSLOptions->Mode = sslmUnassigned;
TIdIMAP4 *IMAPClient = new TIdIMAP4(NULL);
IMAPClient->IOHandler = SSLHandler;
IMAPClient->Host = IMAPAddress; // outlook.office365.com
IMAPClient->Port = IMAPPort; // 993
IMAPClient->Username = IMAPUsername;
IMAPClient->Password = IMAPPassword;
IMAPClient->UseTLS = utUseImplicitTLS;
try{
IMAPClient->Connect(10000);
IMAPClient->AppendMsg("Drafts", Message, Message->Flags); // exception thrown here. Either "10054:Connection reset by peer" or "10053:Software caused connection abort"
IMAPClient->Disconnect();
delete IMAPClient;
delete SSLHandler;
delete Message;
return true;
}
catch(Exception &exception)
{
IMAPClient->Disconnect();
ErrorDialog(exception.Message);
delete IMAPClient;
delete SSLHandler;
delete Message;
return false;
}
}
Edit: Output from IMAP log below:-
Stat Connected.
Recv 02/10/2019 20:25:24: * OK The Microsoft Exchange IMAP4 service is ready. [TABOAFgAUAAyADYANQBDAEEAMAAwADkAMwAuAEcAQgBSAFAAMgA2ADUALgBQAFIATwBEAC4ATwBVAFQATABPAE8ASwAuAEMATwBNAA==]<EOL>
Sent 02/10/2019 20:25:24: C1 LOGIN des@+++++.onmicrosoft.com "+++++++++"<EOL>
Recv 02/10/2019 20:25:24: C1 OK LOGIN completed.<EOL>
Sent 02/10/2019 20:25:24: C2 CAPABILITY<EOL>
Recv 02/10/2019 20:25:24: * CAPABILITY IMAP4 IMAP4rev1 AUTH=PLAIN AUTH=XOAUTH2 SASL-IR UIDPLUS MOVE ID UNSELECT CLIENTACCESSRULES CLIENTNETWORKPRESENCELOCATION BACKENDAUTHENTICATE CHILDREN IDLE NAMESPACE LITERAL+<EOL>C2 OK CAPABILITY completed.<EOL>
Sent 02/10/2019 20:25:25: C3 APPEND "Drafts" (\Draft) {816681+}<EOL>
Sent 02/10/2019 20:25:25: From: "des@+++++.onmicrosoft.com" <des@+++++.onmicrosoft.com><EOL>Content-Type: multipart/mixed; boundary="AB7sooOH0c7ZwPjBXeilIv=_zBKjZ16keW"<EOL>MIME-Version: 1.0<EOL>Date: Wed, 2 Oct 2019 20:25:24 +0100<EOL><EOL>
Sent 02/10/2019 20:25:25: This is a multi-part message in MIME format<EOL><EOL>--AB7sooOH0c7ZwPjBXeilIv=_zBKjZ16keW<EOL>Content-Type: multipart/alternative;<EOL> boundary="UvatywYlNKXglQCy=_QgJ3A4j1k29J4UFf"<EOL><EOL>--UvatywYlNKXglQCy=_QgJ3A4j1k29J4UFf<EOL>Content-Type: text/plain<EOL>Content-Transfer-Encoding: quoted-printable<EOL>Content-Disposition: inline<EOL><EOL>plain text goes here<EOL><EOL>--UvatywYlNKXglQCy=_QgJ3A4j1k29J4UFf<EOL>Content-Type: text/html<EOL>Content-Transfer-Encoding: quoted-printable<EOL>Content-Disposition: inline<EOL><EOL>HTML goes here<EOL><EOL>--UvatywYlNKXglQCy=_QgJ3A4j1k29J4UFf--<EOL><EOL>--AB7sooOH0c7ZwPjBXeilIv=_zBKjZ16keW<EOL>Content-Type: application/zip;<EOL> name="test.zip"<EOL>Content-Transfer-Encoding: base64<EOL>Content-Disposition: attachment;<EOL> filename="test.zip"<EOL><EOL>LyoqKioqKioqKioqKioqKioqICBTVEFOREFSRCBGSUxFIEhFQURFUiAtIFNUQVJUICoqKioqKioq<EOL>KioqKioqKioqKioqKioqKi8NCi8vI3ByYWdtYSBoZHJmaWxlICJ3aW5wcm9wWC5jc20iDQojaW5j<EOL>bHVkZSAic3RkX2hlYWQuaW5jIg0KI3By
--- binary data edited out here, but is incomplete ----
Stat Disconnected.
Stat Disconnected.
Stat Disconnected.