SmtpException - Почтовый ящик недоступен [дубликат]

Вы можете украсить свойство, которое вы хотите контролировать его имя, с помощью атрибута [JsonProperty], который позволяет указать другое имя:

[JsonProperty(PropertyName = "FooBar")]
public string Foo { get; set; }

Документация: Атрибуты сериализации

257
задан Breeze 18 November 2015 в 16:19
поделиться

16 ответов

mail.To и mail.From - только для чтения. Переместите их в конструктор.

using System.Net.Mail;

...

MailMessage mail = new MailMessage("you@yourcompany.com", "user@hotmail.com");
SmtpClient client = new SmtpClient();
client.Port = 25;
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.UseDefaultCredentials = false;
client.Host = "smtp.gmail.com";
mail.Subject = "this is a test email.";
mail.Body = "this is my test email body";
client.Send(mail);
318
ответ дан phadaphunk 21 August 2018 в 09:49
поделиться
  • 1
    -1 ваш код будет работать, но они не только для чтения – Oskar Kjellin 8 February 2012 в 22:59
  • 2
    mail.To только для чтения, от этого нет. public MailAddressCollection To {get; } – MRB 8 February 2012 в 23:01
  • 3
    Это потому, что это коллекция. Вы можете просто называть его добавлением – Oskar Kjellin 8 February 2012 в 23:03
  • 4
    @ Oskar Хорошо, поэтому я должен был быть более конкретным. Вы не можете установить mail.to на определенный адрес. Вы должны использовать конструктор или добавить add. Я обращался только к первому предупреждению компилятора: Ошибка CS0200: свойство или индекс «System.Net.Mail.MailMessage.To» не может быть назначено - он доступен только для чтения – MRB 8 February 2012 в 23:11
  • 5
    @DougHauf Вы можете использовать класс SmtpClient с защищенным паролем smtp-сервером. ваш SMTP-сервер кажется внутренним сервером, который будет означать, что ваша программа сможет подключаться только к этому SMTP-серверу, когда он находится в сети. client.Host = "mail.youroutgoingsmtpserver.com"; client.Credentials = new System.Net.NetworkCredential("yourusername", "yourpassword"); – ChaoticLoki 23 December 2013 в 04:04

Вот как это работает для меня. Надеюсь, вы сочтете это полезным

MailMessage objeto_mail = new MailMessage();
SmtpClient client = new SmtpClient();
client.Port = 25;
client.Host = "smtp.internal.mycompany.com";
client.Timeout = 10000;
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.UseDefaultCredentials = false;
client.Credentials = new System.Net.NetworkCredential("user", "Password");
objeto_mail.From = new MailAddress("from@server.com");
objeto_mail.To.Add(new MailAddress("to@server.com"));
objeto_mail.Subject = "Password Recover";
objeto_mail.Body = "Message";
client.Send(objeto_mail);
15
ответ дан BJury 21 August 2018 в 09:49
поделиться
  • 1
    Из дома у меня нет внутреннего сервера компании или outlook.com на моем компьютере. У меня есть онлайн-аккаунт outlook.com, могу ли я использовать его для Host? – Doug Hauf 23 December 2013 в 04:50

Это сработало для меня по состоянию на март 2017. Началось решение сверху «Наконец-то получилось работать :)», который сначала не работал.

                SmtpClient client = new SmtpClient();
            client.Port =  587;
            client.Host = "smtp.gmail.com";
            client.EnableSsl = true;
            client.Timeout = 10000;
            client.DeliveryMethod = SmtpDeliveryMethod.Network;
            client.UseDefaultCredentials = false;
            client.Credentials = new System.Net.NetworkCredential("<me>@gmail.com", "<my pw>");
            MailMessage mm = new MailMessage(from_addr_text, to_addr_text, msg_subject, msg_body);
            mm.BodyEncoding = UTF8Encoding.UTF8;
            mm.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure;

            client.Send(mm);
2
ответ дан Doug Null 21 August 2018 в 09:49
поделиться
 //Hope you find it useful, it contain too many things

    string smtpAddress = "smtp.xyz.com";
    int portNumber = 587;
    bool enableSSL = true;
    string m_userName = "support@xyz.com";
    string m_UserpassWord = "56436578";

    public void SendEmail(Customer _customers)
    {
        string emailID = gghdgfh@gmail.com;
        string userName = DemoUser;

        string emailFrom = "qwerty@gmail.com";
        string password = "qwerty";
        string emailTo = emailID;

        // Here you can put subject of the mail
        string subject = "Registration";
        // Body of the mail
        string body = "<div style='border: medium solid grey; width: 500px; height: 266px;font-family: arial,sans-serif; font-size: 17px;'>";
        body += "<h3 style='background-color: blueviolet; margin-top:0px;'>Aspen Reporting Tool</h3>";
        body += "<br />";
        body += "Dear " + userName + ",";
        body += "<br />";
        body += "<p>";
        body += "Thank you for registering </p>";            
        body += "<p><a href='"+ sURL +"'>Click Here</a>To finalize the registration process</p>";
        body += " <br />";
        body += "Thanks,";
        body += "<br />";
        body += "<b>The Team</b>";
        body += "</div>";
       // this is done using  using System.Net.Mail; & using System.Net; 
        using (MailMessage mail = new MailMessage())
        {
            mail.From = new MailAddress(emailFrom);
            mail.To.Add(emailTo);
            mail.Subject = subject;
            mail.Body = body;
            mail.IsBodyHtml = true;
            // Can set to false, if you are sending pure text.

            using (SmtpClient smtp = new SmtpClient(smtpAddress, portNumber))
            {
                smtp.Credentials = new NetworkCredential(emailFrom, password);
                smtp.EnableSsl = enableSSL;
                smtp.Send(mail);
            }
        }
    }
0
ответ дан Dutt93 21 August 2018 в 09:49
поделиться
  • 1
    Пожалуйста, подумайте над тем, чтобы использовать свой ответ, чтобы объяснить это решение, и почему первоначальный вопросник столкнулся с проблемой, вместо того, чтобы просто разместить стену кода. Это будет более полезно как для первоначального афера, так и для будущих посетителей понять, почему проблема возникла в первую очередь. – RedBassett 6 February 2017 в 11:25
  • 2
    @RedBassett Спасибо за предложение. Я только что отредактировал и поместил некоторую информацию в комментарии, в следующий раз я помню все, что вы сказали. – Dutt93 6 February 2017 в 12:17

Если вы хотите, чтобы ваша электронная почта и пароль не отображались в вашем коде, и хотите, чтобы ваш почтовый клиент электронной почты вашей компании использовал ваши учетные данные Windows, используйте ниже.

client.Credentials = CredentialCache.DefaultNetworkCredentials;

Источник

7
ответ дан Haider Ali Wajihi 21 August 2018 в 09:49
поделиться
  • 1
    Это то же самое, что и client.UseDefaultCredentials = true; хоть – Alexander 5 July 2017 в 08:45

Просто нужно попробовать:

string smtpAddress = "smtp.gmail.com";
int portNumber = 587;
bool enableSSL = true;
string emailFrom = "companyemail";
string password = "password";
string emailTo = "Your email";
string subject = "Hello!";
string body = "Hello, Mr.";
MailMessage mail = new MailMessage();
mail.From = new MailAddress(emailFrom);
mail.To.Add(emailTo);
mail.Subject = subject;
mail.Body = body;
mail.IsBodyHtml = true;
using (SmtpClient smtp = new SmtpClient(smtpAddress, portNumber))
{
   smtp.Credentials = new NetworkCredential(emailFrom, password);
   smtp.EnableSsl = enableSSL;
   smtp.Send(mail);
}
1
ответ дан Hansy 21 August 2018 в 09:49
поделиться

Наконец, получил работу:)

using System.Net.Mail;
using System.Text;

...

// Command line argument must the the SMTP host.
SmtpClient client = new SmtpClient();
client.Port = 587;
client.Host = "smtp.gmail.com";
client.EnableSsl = true;
client.Timeout = 10000;
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.UseDefaultCredentials = false;
client.Credentials = new System.Net.NetworkCredential("user@gmail.com","password");

MailMessage mm = new MailMessage("donotreply@domain.com", "sendtomyemail@domain.co.uk", "test", "test");
mm.BodyEncoding = UTF8Encoding.UTF8;
mm.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure;

client.Send(mm);

сожалеет о плохом написании до

111
ответ дан JorgeGarza 21 August 2018 в 09:49
поделиться
  • 1
    Не должно быть mm.Dispose ()? – Steam 4 January 2014 в 00:55
  • 2
    Btw, порт smtp по умолчанию - 25. – Steam 4 January 2014 в 01:26
  • 3
    Спасибо! Даже до сегодняшнего дня он работал, но вместо этого использовал прогноз. [client.Host = "smtp-mail.outlook.com & quot ;;] – compski 24 May 2015 в 18:59
  • 4
    587 - безопасный smtp. – user3800527 10 January 2018 в 09:21
  • 5
    @ freej17 add Mail Address copy = new MailAddress (& quot; Уведомление List@contoso.com & quot;); mm.CC.Add (копия); – Sam Stephenson 24 July 2018 в 10:10

Это:

mail.To = "user@hotmail.com";

Должно быть:

mail.To.Add(new MailAddress("user@hotmail.com"));
238
ответ дан Mithrandir 21 August 2018 в 09:49
поделиться
  • 1
    +1 или вы можете отправить их в конструкторе по электронной почте – Oskar Kjellin 8 February 2012 в 22:58
  • 2
    Используя этот и конструктор MailMessage по умолчанию, вы можете установить поле To без установки From, который по умолчанию будет иметь значение в & lt; smtp & gt; Элемент (Настройки сети) – bstoney 10 October 2016 в 22:01
  • 3
    Может ли кто-нибудь сказать мне, как я могу заставить это работать для моего собственного SMTP-сервера вместо Google SMTP? Я получаю ошибку {"Unable to connect to the remote server"} {"The requested address is not valid in its context IP-ADDRESS:25"}, когда пытаюсь подключиться к моему SMTP-серверу – YuDroid 28 December 2016 в 11:16
  • 4
    @YuDroid Правильно задайте Host и Port свойства SmtpClient. – Mithrandir 28 December 2016 в 16:13
  • 5
    @Mithrandir Да, я правильно его установлю. Я настроил свою почтовую учетную запись SMTP в Outlook и схватил все необходимые настройки с их. Хост и порт объявлены в файле Web.config, и я получаю его во время выполнения. – YuDroid 2 January 2017 в 13:08
smtp.Host = "smtp.gmail.com"; // the host name
smtp.Port = 587; //port number
smtp.EnableSsl = true; //whether your smtp server requires SSL
smtp.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;
smtp.Credentials = new NetworkCredential(fromAddress, fromPassword);
smtp.Timeout = 20000;

Для получения более подробной информации о этой статье

20
ответ дан Mo Patel 21 August 2018 в 09:49
поделиться
  • 1
    Это вовсе не означает, почему назначение OP для свойств MailMessage невозможно. – ProfK 9 November 2014 в 13:13
  • 2
    очень сжатое решение, работает для меня. – Ji_in_coding 23 February 2017 в 23:04

MailKit - это кросс-платформенная библиотека .NET-клиента .NET с открытым исходным кодом, основанная на MimeKit и оптимизированная для мобильных устройств.

Загрузите пакет nuget из здесь .

См. Этот пример, который вы используете. может отправить почту

            MimeMessage mailMessage = new MimeMessage();
            mailMessage.From.Add(new MailboxAddress(senderName, sender@address.com));
            mailMessage.Sender = new MailboxAddress(senderName, sender@address.com);
            mailMessage.To.Add(new MailboxAddress(emailid, emailid));
            mailMessage.Subject = subject;
            mailMessage.ReplyTo.Add(new MailboxAddress(replyToAddress));
            mailMessage.Subject = subject;
            var builder = new BodyBuilder();
            builder.TextBody = "Hello There";            
            try
            {
                using (var smtpClient = new SmtpClient())
                {
                    smtpClient.Connect("HostName", "Port", MailKit.Security.SecureSocketOptions.None);
                    smtpClient.Authenticate("user@name.com", "password");

                    smtpClient.Send(mailMessage);
                    Console.WriteLine("Success");
                }
            }
            catch (SmtpCommandException ex)
            {
                Console.WriteLine(ex.ToString());              
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());                
            }
0
ответ дан Naveen Soni 21 August 2018 в 09:49
поделиться

Инициализировать MailMessage с помощью адресов электронной почты отправителя и получателя. Это должно быть что-то вроде

string from = "codeforwin@gmail.com";  //Senders email   
string to = "reciever@gmail.com";  //Receiver's email  
MailMessage msg = new MailMessage(from, to); 

. Прочитайте полный фрагмент кода , как отправлять электронные письма в c #

0
ответ дан Pankaj Prakash 21 August 2018 в 09:49
поделиться

Сначала перейдите в https://myaccount.google.com/lesssecureapps и сделайте Разрешить менее безопасные приложения true.

Затем используйте приведенный ниже код. Этот ниже код будет работать, только если ваш адрес электронной почты отправлен из gmail.

static void SendEmail()
    {
        string mailBodyhtml =
            "<p>some text here</p>";
        var msg = new MailMessage("from@gmail.com", "to1@gmail.com", "Hello", mailBodyhtml);
        msg.To.Add("to2@gmail.com");
        msg.IsBodyHtml = true;
        var smtpClient = new SmtpClient("smtp.gmail.com", 587); **//if your from email address is "from@hotmail.com" then host should be "smtp.hotmail.com"**
        smtpClient.UseDefaultCredentials = true;
        smtpClient.Credentials = new NetworkCredential("from@gmail.com", "password");
        smtpClient.EnableSsl = true;
        smtpClient.Send(msg);
        Console.WriteLine("Email Sended Successfully");
    }
10
ответ дан Siddarth Kanted 21 August 2018 в 09:49
поделиться
MailMessage mm = new MailMessage(txtEmail.Text, txtTo.Text);
mm.Subject = txtSubject.Text;
mm.Body = txtBody.Text;
if (fuAttachment.HasFile)//file upload select or not
{
    string FileName = Path.GetFileName(fuAttachment.PostedFile.FileName);
    mm.Attachments.Add(new Attachment(fuAttachment.PostedFile.InputStream, FileName));
}
mm.IsBodyHtml = false;
SmtpClient smtp = new SmtpClient();
smtp.Host = "smtp.gmail.com";
smtp.EnableSsl = true;
NetworkCredential NetworkCred = new NetworkCredential(txtEmail.Text, txtPassword.Text);
smtp.UseDefaultCredentials = true;
smtp.Credentials = NetworkCred;
smtp.Port = 587;
smtp.Send(mm);
Response.write("Send Mail");

Просмотр видео: https://www.youtube.com/watch?v=bUUNv-19QAI

2
ответ дан Tshilidzi Mudau 21 August 2018 в 09:49
поделиться
  • 1
    Хотя это видео может ответить на вопрос, лучше включить здесь основные части ответа и предоставить ссылку для справки. Ответные ссылки могут стать недействительными, если связанная страница изменяется – afxentios 31 January 2017 в 11:55
  • 2
    msdn , заявленный для свойства UseDefaultCredentials, что & quot; Если для свойства UseDefaultCredentials установлено значение false, тогда значение, установленное в свойстве Credentials, будет использоваться для учетных данных при подключении к серверу. & quot; , поэтому вы должны установить для свойства UseDefaultCredentials значение false, если вы использовали свойство Credentials (пользовательские учетные данные). – Sergei Iashin 17 March 2017 в 21:28
Public Function SendEmail(Optional ByVal p_AsHTML As Boolean = False, Optional ByVal p_themEmail As String = "") As Boolean
            Dim client As SmtpClient = New SmtpClient ''("FMSERVER.FMINNOVATIONS.COM.AU")
            'Dim fromAddress As MailAddress = New MailAddress(Me.FromEmail, "WSMenterprise")
            'Dim toAddress As MailAddress
            Try
                Dim aMessage As New MailMessage()
                '(New MailAddress(Me.FromEmail, "WSMenterprise"), New MailAddress(anAdd))
                If _fromAddress IsNot Nothing Then
                    If _fromName IsNot Nothing Then
                        aMessage.From = New MailAddress(_fromAddress, _fromName)
                    Else
                        aMessage.From = New MailAddress(_fromAddress)
                    End If
                End If
                For Each anAdd As String In _To
                    aMessage.To.Add(New MailAddress(anAdd))
                Next
                For Each cc As String In _CC
                    aMessage.CC.Add(New MailAddress(cc))
                Next
                For Each bcc As String In _BCC
                    aMessage.Bcc.Add(New MailAddress(bcc))
                Next
                aMessage.Subject = _Subject
                aMessage.IsBodyHtml = p_AsHTML

                If _EmailLogo Is Nothing Then
                    aMessage.Body = _Body
                Else
                    If p_themEmail.ToString().ToLower.Contains("dexus") Then

                       Dim htmlView = AlternateView.CreateAlternateViewFromString(_Body.ToString(), Nothing, "text/html")
                        Dim logo As New LinkedResource(_EmailLogo)
                        logo.ContentId = "Dexuslogo1"
                        Dim logo1 As New LinkedResource(_EmailLogo1)
                        logo1.ContentId = "Dexuslogo2"
                        htmlView.LinkedResources.Add(logo)
                        htmlView.LinkedResources.Add(logo1)
                        aMessage.AlternateViews.Add(htmlView)

                    Else

                        Dim htmlView = AlternateView.CreateAlternateViewFromString(_Body.ToString(), Nothing, "text/html")
                        Dim logo As New LinkedResource(_EmailLogo)
                        logo.ContentId = "companylogo"
                        htmlView.LinkedResources.Add(logo)
                        aMessage.AlternateViews.Add(htmlView)
                    End If
                End If

                For Each anAttach As Attachment In _Attachments
                    aMessage.Attachments.Add(anAttach)
                Next

                If _ReplyTo IsNot Nothing Then aMessage.ReplyToList.Add(New MailAddress(_ReplyTo))
                client.Host = "smtpi.cbre.com.au"
                client.UseDefaultCredentials = True
                client.Send(aMessage)
            Catch exRecipUnk As SmtpFailedRecipientException
                Return False
            Catch exSmtp As SmtpException
                ''exSmtp.StatusCode
                Return False
            Catch ex As Exception
                Return False
            End Try
            Return True
        End Function
    If p_Gmap_code = "DE" Then
                Dim p_Theme As New Theme("Dexus")
                Dim passwordlink As String = ""
                Dim DexuslogoImage1 As String = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Images\Dexus_Notice_Logo.png")
                Dim DexuslogoImage2 As String = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Images\DexusTenantNotice.png")

                passwordlink = "<a href='" + p_Theme.TenantLoginPage + "?accesstype=email&te=" + a.Encrypt(p_TenantEmail) + "' target='_blank'>here.</a><br/>"
                bodys += "<div align='Center'><table border='0' cellpadding='0' cellspacing='0'><tr style='height:50px;'><td width='623px' ></td><td valign='top' width='180'><p align='right'><a href='http://www.dexus.com/'><img border='0' height='50' src=cid:Dexuslogo1 width='174' alt=''/></a></p></td></tr><tr><td colspan='2' width='803' style='height:25px;'></td></tr> <tr><td width='623px'><p align='left' style='font-family:Arial;font-size:14pt;'><strong> Your Dexus Response Password is about to expire</strong></p></td>"
                bodys += " <td width='180'><p align='right' style='font-family:Arial;font-size:10pt;'>" + DateTime.Now.ToString("dd/MM/yyyy") + " </p>"
                bodys += "</td></tr><tr><td colspan='2' width='803' style='height:30px;'>  </td></tr> <tr>  <td colspan='2' width='803' style='font-family:Arial;font-size:10pt;'>"
                bodys += "<p>" + wishes + " " + p_TenantName.Trim().ToString() + "</p>"
                bodys += "</td></tr><tr><td colspan='2' width='803' style='height:25px;'></td> </tr><tr><td colspan='2' width='803' style='font-family:Arial;font-size:10pt;'>"
                bodys += "Your Dexus Response password is about to expire in " + p_remaindays.ToString() + " days.<br /><br /> To reset your password and update your details, please click " + passwordlink.ToString() + "<br /><br />Please note that if you do not update your password by " + p_date + ",then your account will be set to inactive and you will not be able to access Dexus Response.</br></br>Please contact Dexus Response if you require assistance in accessing the portal.</p></td>" 'edit
                bodys += " </tr><tr><td colspan='2' width='803' style='height:30px;'></td></tr><tr><td colspan='2' width='803'><table align='left' border='0' cellpadding='0' cellspacing='0'><tr><td width='802' style='font-family:Arial;font-size:10pt;'><p><strong>Dexus Response</strong></p></td></tr><tr><td width='802' style='font-family:Arial;font-size:10pt;'><p><a href='mailto:property.services@dexusfm.com'>property.services@dexusfm.com</a> <strong>|</strong> 1300 339 870 <strong>|</strong> <a href='https://response.dexus.com/'>response.dexus.com</a></p></td></tr></table></td></tr><tr><td colspan='2' width='803' style='height:15px;'></td></tr><tr> <td colspan='2' width='803'><p> </p><p><a href='https://response.dexus.com/' border='0' target='_blank'><img border='0' height='133'"
                bodys += "src=cid:Dexuslogo2 alt='' width='800' /></a></p></td></tr><tr><td colspan='2' width='803' style='height:10px;'></td></tr><tr><td colspan='2' width='803' style='font-family:Arial;font-size:10pt;'><p><a href='http://www.dexus.com/who-we-are/terms-and-conditions' style=' color:#000000;'>Terms and Conditions</a><strong> | </strong><a href='http://www.dexus.com/who-we-are/privacy-policy' style=' color:#000000;'> Privacy Policy</a></p></td></tr><tr><td colspan='2' width='803' style='height:40px;'></td></tr><tr><td colspan='2' width='803'><p></p></td></tr><tr><td colspan='2' width='803' style='height:10px;'></td></tr><tr></tr><tr><td colspan='2' width='803' style='height:20px;'></td></tr></table></div>"

                email = New Common.Email(emailHeading, bodys, p_Theme.EmailFrom, DexuslogoImage1, DexuslogoImage2)
                email.ToEmail = p_TenantEmail
                email.SendEmail(True, p_Theme.EmailFrom)
0
ответ дан user 21 August 2018 в 09:49
поделиться

это тоже сработает ..

string your_id = "your_id@gmail.com";
string your_password = "password";
try
{
   SmtpClient client = new SmtpClient
   {
     Host = "smtp.gmail.com",
     Port = 587,
     EnableSsl = true,
     DeliveryMethod = SmtpDeliveryMethod.Network,
     Credentials = new System.Net.NetworkCredential(your_id, your_password),
     Timeout = 10000,
   };
   MailMessage mm = new MailMessage(your_iD, "recepient@gmail.com", "subject", "body");
   client.Send(mm);
   Console.WriteLine("Email Sent");
 }
 catch (Exception e)
 {
   Console.WriteLine("Could not end email\n\n"+e.ToString());
 }
0
ответ дан user3188978 21 August 2018 в 09:49
поделиться
20
ответ дан Mo Patel 1 November 2018 в 04:08
поделиться