• XSS.stack #1 – первый литературный журнал от юзеров форума

[C#]Как не попадать в BL(спам лист) почты

Ags1of

RAM
Пользователь
Регистрация
26.11.2021
Сообщения
122
Реакции
1
Хотел бы поинтересоваться, как можно не попадать в спам лист почты рамблер, может как-то подкручивать прокси или что можно ещё сделать? Я вот попал, теперь буду ждать или связываться с тх, чтобы выйти оттуда. Но,подскажите, пожалуйста, как в дальнейшем избежать попадание туда? Может кто знает? Оставлю код, по которому идёт отправка:

C#:
SmtpClient cs = new SmtpClient("smtp.rambler.ru");
string nik = guna2TextBox7.Text;
mail.From = new MailAddress(MyEmailsSort[schetchik], nik);
mail.To.Add(emails[i]);
mail.Subject = Subject;
mail.Attachments.Add(new Attachment(Pathis));
mail.Body = message;

cs.Port = 587;
cs.EnableSsl = true;
string log = MyEmailsSort[schetchik];
string pass = MyEmailsSort[schetchik + 1];

if (log == null && pass == null)
{
    MessageBox.Show("Почты закончились.");
}
cs.Credentials = new NetworkCredential(MyEmailsSort[schetchik], MyEmailsSort[schetchik + 1]);
cs.Send(mail);
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Хорошо, а как можно сюда прикрутить прокси? Просто я пытался, но ничего не вышло
Честно сказать, в чистом шарпе не помню можно ли вообще это сделать. Для работы с почтой я юзал когда-то MailKit.
В нем точно были прокси. Я его использовал для imap/pop3. Но, вероятно, в их реализации smtp клиента есть тоже прокси.
MailKit поставь через нугет и дальше по доке, а там разберешься
 
По коду можно сделать так:
C#:
namespace SmtpMailer
{
    using System;
    using System.IO;
    using System.Net;
    using System.Net.Mail;
    using System.Net.Security;
    using System.Security.Cryptography.X509Certificates;
    using System.Text;
    using System.Text.RegularExpressions;

    public static class MailerSettings
    {
        public static void ToSend()
        {
            WebRequest.DefaultWebProxy = new WebProxy("10.1.1.4", 8080); // Глобальный прокси
            using MailMessage mess = new();
            mess.From = new MailAddress("Login", "DisplayName", Encoding.UTF8); // Адрес отправителя, Отображаемое имя ( за место почты )
            mess.To.Add(new MailAddress("ToSend", null, Encoding.UTF8)); // Адрес получателя
            mess.Subject = Environment.UserName; // Тема сообщения
            mess.SubjectEncoding = Encoding.UTF8; // Кодировка UTF-8 для темы сообщения
            mess.BodyEncoding = Encoding.UTF8; // Кодировка UTF-8 для тела сообщения
            mess.Body = "Text"; // Текст сообщения
            mess.IsBodyHtml = true; // Сообщение в формате html
            mess.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure; // Уведомление если доставка неудачна
            // mess.Attachments.Add(new Attachment(AttachFiles[i])); // Если надо залить какой-то файл

            using SmtpClient client = new($"smtp.server.ru", 22); // smtp сервер и порт // "proxy.mailserver.com", 8080

            ServicePointManager.ServerCertificateValidationCallback += ValidateRemoteCertificate;
            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Ssl3;
            client.EnableSsl = true; // Включаем SSL
            client.DeliveryMethod = SmtpDeliveryMethod.Network;
            client.UseDefaultCredentials = false;
            client.Timeout = 12000; // Тайм-аут отправки сообщения
            client.Credentials = new NetworkCredential("Login", "Password"); // Авторизация в почте

            try
            {
                client.Send(mess); // Отправка сообщения на почту
                Console.WriteLine($"Сообщение отправлено");
            }
            catch (Exception sendex)
            {
                File.WriteAllText("Error_SendMessage.txt", sendex.Message); // Лог ошибки в текстовый файл
            }
        }

        private static bool ValidateRemoteCertificate(object sender, X509Certificate cert, X509Chain chain, SslPolicyErrors error) => error == SslPolicyErrors.None;

        /// <summary>
        /// Метод для проверки правильности ввода почты
        /// </summary>
        /// <param name="emailInput">Почта</param>
        /// <returns>true/false</returns>
        public static bool CheckValidAddress(string emailInput)
        {
            Regex _regex = new(@"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$",
            RegexOptions.CultureInvariant | RegexOptions.Compiled);
            return _regex.IsMatch(emailInput);
        }
    }
}
Подключение прокси осуществляется таким кодом:
C#:
HttpProxy proxy = new("IP proxy", 8080); // Прокси и порт
Можешь попробовать подключить EASendMail через Nuget, он работает с проксями.
Или как выше сказали, подключай MailKit через Nuget
А ещё есть Aspose-Email API
 
Последнее редактирование:


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх