2

Mailaddress クラスを使用して複数のメール (>10) を送信しようとしていますが、どうやら気に入らないようです。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);
4

3 に答える 3

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);

ループを使用する場合は、文字列の最後のカンマを必ず削除してください (各エントリの後にカンマが追加されるため、最後の電子メールの後に余分なカンマが 1 つ追加されます)。

于 2016-06-21T08:16:22.780 に答える
0

正規表現を使用して、メール アドレスを他の文字から分離できます。次に例を示します。

(<)(\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);
        }

これが実行中の例です。

于 2016-06-21T08:34:32.907 に答える
0

次のように、skip メソッドを使用して通常の C# コードで cc メールを取得するコードを作成することもできます。

   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();
    }

この配列をSystem.Net.Mailの MailMessage クラスの CC プロパティに割り当てます。

于 2016-06-21T10:07:39.197 に答える