Тип математики с плавающей запятой, которая может быть реализована на цифровом компьютере, обязательно использует приближение реальных чисел и операций над ними. (Стандартная версия стандартная работает до более чем пятидесяти страниц документации и имеет комитет для рассмотрения ее ошибок и дальнейшего уточнения.)
Это приближение представляет собой смесь приближений разного типа, каждый из которых можно либо игнорировать, либо тщательно учитывать из-за его конкретного способа отклонения от точности. Это также включает в себя ряд явных исключительных случаев как на уровне аппаратного обеспечения, так и на уровне программного обеспечения, которое большинство людей прогуливает прямо мимо, делая вид, что не замечает.
Если вам нужна бесконечная точность (например, вместо числа π одного из его более коротких резервных копий), вы должны написать или использовать символическую математическую программу.
Но если вы в порядке с идеей о том, что иногда математика с плавающей запятой нечеткая по значению и логике и ошибки могут быстро накапливаться, и вы можете написать свои требования и тесты для этого, тогда ваш код может часто проходить с помощью того, что находится в вашем FPU.
Убедитесь, что вы используете фактический адрес электронной почты office365 для учетной записи. Вы можете найти его, нажав кнопку профиля в Outlook365. Я боролся с аутентификацией, пока не понял, что адрес электронной почты, который я пытался использовать для аутентификации, не был фактическим почтовым ящиком почтового ящика. Фактическая учетная запись электронной почты может иметь форму: account@company.onmicrosoft.com.
Мы работаем, преобразовывая почтовые ящики (от адреса) с «общего» на «обычный». Перед этим изменением мое приложение прекратило отправку электронной почты при переносе из Gmail в Office 365. Никаких других изменений кода не требовалось, кроме того, чтобы установить хост на smtp.office365.com
.
Чтобы помочь в отладке, попробуйте временно переключиться на MailKit и использовать фрагмент кода, например следующее:
using System;
using MailKit.Net.Smtp;
using MailKit.Security;
using MailKit;
using MimeKit;
namespace TestClient {
class Program
{
public static void Main (string[] args)
{
var message = new MimeMessage ();
message.From.Add (new MailboxAddress ("", "test.user@mydomain.com"));
message.To.Add (new MailboxAddress ("", "test.recipient@anotherdomain.com"));
message.Subject = "Test message";
message.Body = new TextPart ("plain") { Text = "This is the message body." };
using (var client = new SmtpClient (new ProtocolLogger ("smtp.log"))) {
client.Connect ("smtp.office365.com", 587, SecureSocketOptions.StartTls);
client.Authenticate ("test.user@mydomain.com", "password");
client.Send (message);
client.Disconnect (true);
}
}
}
}
Это приведет к регистрации всей транзакции в файл с именем «smtp.log», который вы затем можете прочитать и увидеть, где все может пойти не так.
Обратите внимание, что smtp.log, скорее всего, содержит команду AUTH LOGIN
, за которой следуют несколько команд, закодированных base64 ( это ваш пользователь / пропуск), поэтому, если вы делитесь журналом, обязательно очистите эти строки.
Я ожидаю, что это будет иметь ту же ошибку, что и в System.Net.Mail, но это поможет вам понять, что происходит.
Предполагая, что это не сработает (и я ожидаю, что это произойдет), попробуйте перейти на SecureSocketOptions.None
и / или попытаться комментировать Authenticate()
.
Посмотрите, как это изменит ошибку, которую вы видите.
В моем случае моя проблема не была связана с кодом, а как-то с почтовым ящиком Exchange. Не знаю, почему, но это решило мою проблему:
Это дает разрешения пользователю отправлять электронные письма от своего имени. Теоретически NT AUTHORITY \ SELF должен делать то же самое, но по какой-то причине это не сработало.
Источник: http://edudotnet.blogspot.com.mt/2014/02/smtp -Microsoft-офисно-365-нетто-smtp.html
В моем случае после того, как я попробовал все это предложение без везения, я связался с поддержкой Microsoft, и их предложение состояло в том, чтобы просто сменить пароль.
Это исправило мою проблему.
Обратите внимание, что пароль не истек, потому что я успешно выполнил вход в office365, однако сброс решил проблему.
Урок: не доверяйте истечению срока действия Office 365 дата, в моем случае срок действия пароля истекает через 1-2 месяца, но он не работает. Это привело меня к исследованию в моем коде, и только после того, как я понял, что проблема была в пароле Office365, который был «поврежден» или «досрочно истек».
Не забывайте каждые 3 месяца «обновить» пароль.
Пожалуйста, проверьте ниже код, который я тестировал для отправки электронной почты с помощью Exchange Online:
MailMessage msg = new MailMessage();
msg.To.Add(new MailAddress("YourEmail@hotmail.com", "XXXX"));
msg.From = new MailAddress("XXX@msdnofficedev.onmicrosoft.com", "XXX");
msg.Subject = "This is a Test Mail";
msg.Body = "This is a test message using Exchange OnLine";
msg.IsBodyHtml = true;
SmtpClient client = new SmtpClient();
client.UseDefaultCredentials = false;
client.Credentials = new System.Net.NetworkCredential("XXX@msdnofficedev.onmicrosoft.com", "YourPassword");
client.Port = 587; // You can use Port 25 if 587 is blocked
client.Host = "smtp.office365.com";
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.EnableSsl = true;
try
{
client.Send(msg);
}
catch (Exception ex)
{
}
Порт отправлен (587) для отправки сообщения. Хотя порт 587 не требует мандата STARTTLS, использование порта 587 стало популярным примерно в то же время, когда осознание того, что шифрование SSL / TLS между клиентами и серверами является важной проблемой безопасности и конфиденциальности.