-
Notifications
You must be signed in to change notification settings - Fork 4.7k
/
MailAddressCollection.cs
75 lines (62 loc) · 2.4 KB
/
MailAddressCollection.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Net.Mime;
using System.Text;
namespace System.Net.Mail
{
public class MailAddressCollection : Collection<MailAddress>
{
public MailAddressCollection()
{
}
public void Add(string addresses)
{
ArgumentException.ThrowIfNullOrEmpty(addresses);
ParseValue(addresses);
}
protected override void SetItem(int index, MailAddress item)
{
ArgumentNullException.ThrowIfNull(item);
base.SetItem(index, item);
}
protected override void InsertItem(int index, MailAddress item)
{
ArgumentNullException.ThrowIfNull(item);
base.InsertItem(index, item);
}
internal void ParseValue(string addresses)
{
IList<MailAddress> result = MailAddressParser.ParseMultipleAddresses(addresses);
for (int i = 0; i < result.Count; i++)
{
Add(result[i]);
}
}
public override string ToString() => string.Join(", ", this);
internal string Encode(int charsConsumed, bool allowUnicode)
{
string encodedAddresses = string.Empty;
//encode each address individually (except the first), fold and separate with a comma
foreach (MailAddress address in this)
{
if (string.IsNullOrEmpty(encodedAddresses))
{
//no need to append a comma to the first one because it may be the only one.
encodedAddresses = address.Encode(charsConsumed, allowUnicode);
}
else
{
//appending another one, append a comma to separate and then fold and add the encoded address
//the charsConsumed will be 1 because only the first line needs to account for the header itself for
//line length; subsequent lines have a single whitespace character because they are folded here
encodedAddresses += ", " + address.Encode(1, allowUnicode);
}
}
return encodedAddresses;
}
}
}