Копия (почта) после 6-го письма

Я пытаюсь отправить несколько электронных писем (>10), используя класс Mailaddress, но, видимо, это не нравится. есть ли способ прикрепить электронные письма после 6-го в CC?

или любая другая работа вокруг?

Я имею:

(<email1@test.com>; <email2@test.com>; <email3@test.com>, <email4@test.com>; <email5@test.com>; \r\n\t<email6@test.com>, <email7@test.com>; <email8@test.com>\r\n\TEXT)

Я делаю Environment.NewLine, я заменяю <,>, \t и " " на "" (не знаю другого лучшего способа отформатировать его)

при попытке отправить его через класс почтового адреса я получаю сообщение об ошибке формата. но работает нормально, когда количество писем меньше.

Решено:

            string to = "";
            string cc = "";
            int i = 0;
            foreach (string item in multiAddress.Split(','))
            {
                i += 1;
                if (i < 10)
                {
                    to += item + ",";
                }
                else
                {
                    cc += item + ",";
                }
            }
            to = to.Remove(to.Length - 1);
            cc = cc.Remove(cc.Length - 1);

3 ответа

Решение

Почему вы не можете использовать обычный способ отправки электронной почты на несколько адресов? в строку, разделенную запятыми, как это:

string recipients="email1@test.com,email2@test.com,email3@test.com" etc..

Лично я получил ошибку, когда попытался отправить более 9 получателям, поэтому я написал следующий фрагмент кода, который после 9-го получателя автоматически перемещает получателей в поле CC.

       var emailAddresses= "YourEmailAddresses";

        //conccatenat all the email addresses into one variable
        //if there is more than 9 recipients it moves them to the CC field
        string to="";
        string cc = "";
        int i = 0;
        foreach (string item in emailAddresses) {
            i += 1;
            if (i < 10) {
                to += item + ",";
            }
            else
            {
                cc += item + ",";
            }
         to = to.Remove(to.Length - 1);

Если вы используете цикл, убедитесь, что удалили последнюю запятую в строке (потому что она добавляет запятую после каждой записи, так что у вас будет одна лишняя после последнего письма).

Вы также можете написать код для получения письма cc следующим образом с обычным кодом C#, используя метод пропуска

   public static string[] GetCCEmails()
   {
       const int limitToIncludeCC = 10 ;// no of email to be skipped
       string[] emailAdresses = new string[] { "emailadress1@xx.com", "emailadress2@xx.com", "emailadress2@xx.com", "emailadress3@xx.com", "emailadress4@xx.com", "emailadress5@xx.com" };
       var ccmailIDs = emailAdresses.Skip(limitToIncludeCC);
       return ccmailIDs.ToArray();
    }

и назначьте этот массив для свойства CC класса MailMessage System.Net.Mail.

Вы можете использовать регулярные выражения, чтобы изолировать почтовые адреса от других символов. Например:

(<)(\w+@\w+\.\w+)(>)

Будет соответствовать любой почтовый адрес между углами.

        string source = "(<email1@test.com>; <email2@test.com>; <email3@test.com>, <email4@test.com>; <email5@test.com>; \r\n\t<email6@test.com>, <email7@test.com>; <email8@test.com>\r\nTEXT)";
        Regex regx = new Regex(@"(<)(\w+@\w+\.\w+)(>)");

        MatchCollection matches = regx.Matches(source);
        foreach (Match match in matches) {
            Console.WriteLine(match.Groups[2].Value);
        }

Вот вам пример.

Другие вопросы по тегам