System.Net.Mail - Невозможно отправить электронное письмо пользователям: появляется сообщение об ошибке «Ошибка транзакции: ответ сервера [имя домена здесь]» - PullRequest
0 голосов
/ 20 сентября 2018

При попытке отправить после выбора нескольких пользователей или хотя бы одного из списка флажков в моей веб-форме (при получении электронных писем из LDAP) я (самопроизвольно) продолжаю получать эту ошибку - (иногда это работает, а иногда нет)и теперь не полностью)

"Transaction Failed: The Server Response from was [name of my email host is displayed here - ex: email.domain.com]

[SmtpException: Transaction failed. The server response was: email.domain.com]
   System.Net.Mail.SmtpConnection.GetConnection(ServicePoint servicePoint) +1670
   System.Net.Mail.SmtpTransport.GetConnection(ServicePoint servicePoint) +226
   System.Net.Mail.SmtpClient.GetConnection() +46
   System.Net.Mail.SmtpClient.Send(MailMessage message) +1859
   TestFormV2._Default.SendTesterEmail() in \source\repos\TestFormV2\TestFormV2\Default.aspx.cs:95
   TestFormV2._Default.emailTester_Click(Object sender, EventArgs e) in \source\repos\TestFormV2\TestFormV2\Default.aspx.cs:110
   System.Web.UI.WebControls.Button.OnClick(EventArgs e) +109
   System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +108
   System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10
   System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
   System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +31
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3467

Вот мой код:

using System;
using System.Web.UI;
using System.DirectoryServices;
using System.Collections.Specialized;
using System.Net.Mail;
using System.Net.Security;
using System.Net;
using System.Security.Cryptography.X509Certificates;
using System.Web.UI.WebControls;

namespace TestFormV2
{
    public partial class _Default : Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            LDAPQuery();

        }

        protected void LDAPQuery()
        {
            try
            {
                DirectoryEntry entry = new DirectoryEntry("LDAP://123.45.678.9:123/cn=TestingCompletion,ou=Groups,dc=domain,dc=domain", "uid=username, ou=people, dc=domain,dc=domain", "password", AuthenticationTypes.None);
                //List<string> GroupMembers = new List<string>(); //{ "first_last", "first_last" };
                StringCollection GroupMembers = new StringCollection();


                Object obj = entry.NativeObject;
                //Console.WriteLine("login success");

                DirectorySearcher search = new DirectorySearcher(entry);

                search.PropertiesToLoad.Add("uniqueMember");
                search.PropertiesToLoad.Add("uid");
                search.PropertiesToLoad.Add("mail");
                search.SearchScope = SearchScope.Subtree;
                search.Filter = "(&(uniqueMember=*))";

                //SearchResultCollection resultCollection = search.FindAll();
                foreach (SearchResult result in search.FindAll())
                {
                    ResultPropertyCollection resultProperty = result.Properties;

                    foreach (string GroupMemberDN in resultProperty["uniqueMember"])
                    {
                        DirectoryEntry directoryMember = new DirectoryEntry("LDAP://123.45.678.9/" + GroupMemberDN, "uid=username, ou=people, dc=domain,dc=domain", "password", AuthenticationTypes.None);
                        PropertyCollection DirectoryMemberProperties = directoryMember.Properties;
                        GroupMembers.Add(directoryMember.Properties["mail"][0].ToString());
                    }
                }
                foreach (string member in GroupMembers)
                {
                    //UserDropDownCheckBox.Items.Add(member);
                    UsersEmailList.Items.Add(member);
                    //Console.WriteLine(member);

                }

            }

            catch (Exception e)
            {
                exceptionMsg.Text = e.Message.ToString();
                //Console.WriteLine(e.Message.ToString());
            }
        }

        protected void SendTesterEmail()
        {

            foreach (ListItem item in UsersEmailList.Items)
            {
                   if (item.Selected == true)
                    {
                    // Send email to selected user(s)
                    MailMessage mail = new MailMessage();
                    mail.To.Add(new MailAddress(item.Value));
                    mail.From = new MailAddress("user_name@email.com");
                    mail.Subject = "Testing Completion Form";
                    mail.Body = "This is a test message";
                    //MailAddress copy = new MailAddress("user_testing@email.com");
                    //mail.CC.Add(copy);
                    mail.IsBodyHtml = true;
                    mail.Priority = MailPriority.Normal;
                    SmtpClient client = new SmtpClient("smtp.email.com", 25);
                    //mail.Attachments.Add(new Attachment(pdfContents, "filename.pdf"));
                    client.EnableSsl = true;
                    client.DeliveryMethod = SmtpDeliveryMethod.Network;
                    client.UseDefaultCredentials = false;
                    client.Credentials = new NetworkCredential("user_name@email.com", "mypassword");
                    ServicePointManager.ServerCertificateValidationCallback = delegate (object s, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { return true; };

                    client.Send(mail);

                    SuccessOrFailMsg.Text = "Message Sent Successfully.";

                        //resetFields();

                    }

                }

        }


        protected void emailTester_Click(object sender, EventArgs e)
        {
            SendTesterEmail();

            //clear fields after submit
        }

        protected void resetFields()
        {
            Text1.Text = "";
            systemMenu.ClearSelection();
            otherSystem.Text = "";
            UsersEmailList.ClearSelection();
            dueDate.Text = "";
            SuccessOrFailMsg.Text = "";
        }

        protected void resetFieldsBtn_Click(object sender, EventArgs e)
        {
            resetFields();
        }
    }
}

Я хотел бы иметь возможность отправлять нескольким пользователям из списка флажков, который у меня есть в форме (это извлекается из LDAP) однако его не работает!Если кто-то может направить меня в правильном направлении, это будет с благодарностью!

1 Ответ

0 голосов
/ 21 сентября 2018

На самом деле удаление SSL и NetworkCredentials решило проблему!По-видимому, наш SMTP-хост не работает с SSL на порту 25.

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