Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
MailAddress.cs
Go to the documentation of this file.
4using System.Text;
5
6namespace System.Net.Mail;
7
8public class MailAddress
9{
11
12 private readonly string _displayName;
13
14 private readonly string _userName;
15
16 private readonly string _host;
17
19
20 public string DisplayName => _displayName;
21
22 public string User => _userName;
23
24 public string Host => _host;
25
26 public string Address => _userName + "@" + _host;
27
28 private string SmtpAddress => "<" + Address + ">";
29
30 internal MailAddress(string displayName, string userName, string domain, Encoding displayNameEncoding)
31 {
32 _host = domain;
33 _userName = userName;
34 _displayName = displayName;
35 _displayNameEncoding = displayNameEncoding ?? Encoding.GetEncoding("utf-8");
36 }
37
38 public MailAddress(string address)
39 : this(address, null, null)
40 {
41 }
42
43 public MailAddress(string address, string? displayName)
44 : this(address, displayName, null)
45 {
46 }
47
48 public MailAddress(string address, string? displayName, Encoding? displayNameEncoding)
49 {
50 (string, string, string, Encoding) parsedData;
51 bool flag = TryParse(address, displayName, displayNameEncoding, out parsedData, throwExceptionIfFail: true);
53 }
54
55 public static bool TryCreate(string address, [NotNullWhen(true)] out MailAddress? result)
56 {
57 return TryCreate(address, null, out result);
58 }
59
60 public static bool TryCreate(string address, string? displayName, [NotNullWhen(true)] out MailAddress? result)
61 {
62 return TryCreate(address, displayName, null, out result);
63 }
64
65 public static bool TryCreate(string address, string? displayName, Encoding? displayNameEncoding, [NotNullWhen(true)] out MailAddress? result)
66 {
67 if (TryParse(address, displayName, displayNameEncoding, out (string, string, string, Encoding) parsedData, throwExceptionIfFail: false))
68 {
69 result = new MailAddress(parsedData.Item1, parsedData.Item2, parsedData.Item3, parsedData.Item4);
70 return true;
71 }
72 result = null;
73 return false;
74 }
75
76 private static bool TryParse(string address, string displayName, Encoding displayNameEncoding, out (string displayName, string user, string host, Encoding displayNameEncoding) parsedData, bool throwExceptionIfFail)
77 {
78 if (string.IsNullOrEmpty(address))
79 {
80 if (throwExceptionIfFail)
81 {
82 throw (address == null) ? new ArgumentNullException("address") : new ArgumentException(System.SR.Format(System.SR.net_emptystringcall, "address"), "address");
83 }
84 parsedData = default((string, string, string, Encoding));
85 return false;
86 }
87 if (displayNameEncoding == null)
88 {
89 displayNameEncoding = Encoding.GetEncoding("utf-8");
90 }
91 if (displayName == null)
92 {
93 displayName = string.Empty;
94 }
95 if (!string.IsNullOrEmpty(displayName))
96 {
97 if (!MailAddressParser.TryNormalizeOrThrow(displayName, out displayName, throwExceptionIfFail))
98 {
99 parsedData = default((string, string, string, Encoding));
100 return false;
101 }
102 if (displayName.Length >= 2 && displayName[0] == '"' && displayName[^1] == '"')
103 {
104 displayName = displayName.Substring(1, displayName.Length - 2);
105 }
106 }
107 if (!MailAddressParser.TryParseAddress(address, out var parsedAddress, throwExceptionIfFail))
108 {
109 parsedData = default((string, string, string, Encoding));
110 return false;
111 }
112 if (string.IsNullOrEmpty(displayName))
113 {
114 displayName = parsedAddress.DisplayName;
115 }
116 parsedData = (displayName: displayName, user: parsedAddress.User, host: parsedAddress.Host, displayNameEncoding: displayNameEncoding);
117 return true;
118 }
119
120 private string GetUser(bool allowUnicode)
121 {
122 if (!allowUnicode && !MimeBasePart.IsAscii(_userName, permitCROrLF: true))
123 {
125 }
126 return _userName;
127 }
128
129 private string GetHost(bool allowUnicode)
130 {
131 string text = _host;
132 if (!allowUnicode && !MimeBasePart.IsAscii(text, permitCROrLF: true))
133 {
134 IdnMapping idnMapping = new IdnMapping();
135 try
136 {
137 text = idnMapping.GetAscii(text);
138 }
139 catch (ArgumentException innerException)
140 {
141 throw new SmtpException(System.SR.Format(System.SR.SmtpInvalidHostName, Address), innerException);
142 }
143 }
144 return text;
145 }
146
147 private string GetAddress(bool allowUnicode)
148 {
149 return GetUser(allowUnicode) + "@" + GetHost(allowUnicode);
150 }
151
152 internal string GetSmtpAddress(bool allowUnicode)
153 {
154 return "<" + GetAddress(allowUnicode) + ">";
155 }
156
157 public override string ToString()
158 {
159 if (string.IsNullOrEmpty(DisplayName))
160 {
161 return Address;
162 }
163 return "\"" + DisplayName.Replace("\"", "\\\"") + "\" " + SmtpAddress;
164 }
165
166 public override bool Equals([NotNullWhen(true)] object? value)
167 {
168 if (value == null)
169 {
170 return false;
171 }
172 return ToString().Equals(value.ToString(), StringComparison.InvariantCultureIgnoreCase);
173 }
174
175 public override int GetHashCode()
176 {
178 }
179
180 internal string Encode(int charsConsumed, bool allowUnicode)
181 {
182 string empty = string.Empty;
183 if (!string.IsNullOrEmpty(_displayName))
184 {
185 if (MimeBasePart.IsAscii(_displayName, permitCROrLF: false) || allowUnicode)
186 {
187 empty = "\"" + _displayName + "\"";
188 }
189 else
190 {
191 IEncodableStream encoderForHeader = s_encoderFactory.GetEncoderForHeader(_displayNameEncoding, useBase64Encoding: false, charsConsumed);
193 empty = encoderForHeader.GetEncodedString();
194 }
195 return empty + " " + GetSmtpAddress(allowUnicode);
196 }
197 return GetAddress(allowUnicode);
198 }
199}
string GetAscii(string unicode)
Definition IdnMapping.cs:44
static bool TryParseAddress(string data, out ParseAddressInfo parsedAddress, bool throwExceptionIfFail)
static bool TryNormalizeOrThrow(string input, [NotNullWhen(true)] out string normalizedString, bool throwExceptionIfFail)
static readonly EncodedStreamFactory s_encoderFactory
MailAddress(string address, string? displayName, Encoding? displayNameEncoding)
string GetAddress(bool allowUnicode)
static bool TryCreate(string address, string? displayName, [NotNullWhen(true)] out MailAddress? result)
string GetSmtpAddress(bool allowUnicode)
string Encode(int charsConsumed, bool allowUnicode)
static bool TryCreate(string address, [NotNullWhen(true)] out MailAddress? result)
static bool TryParse(string address, string displayName, Encoding displayNameEncoding, out(string displayName, string user, string host, Encoding displayNameEncoding) parsedData, bool throwExceptionIfFail)
readonly Encoding _displayNameEncoding
string GetHost(bool allowUnicode)
readonly string _userName
override string ToString()
readonly string _displayName
MailAddress(string address, string? displayName)
MailAddress(string address)
string GetUser(bool allowUnicode)
static bool TryCreate(string address, string? displayName, Encoding? displayNameEncoding, [NotNullWhen(true)] out MailAddress? result)
override bool Equals([NotNullWhen(true)] object? value)
MailAddress(string displayName, string userName, string domain, Encoding displayNameEncoding)
static bool IsAscii(string value, bool permitCROrLF)
static string SmtpNonAsciiUserNotSupported
Definition SR.cs:104
static string Format(string resourceFormat, object p1)
Definition SR.cs:118
static string net_emptystringcall
Definition SR.cs:14
static string SmtpInvalidHostName
Definition SR.cs:88
Definition SR.cs:7
static StringComparer InvariantCultureIgnoreCase
static Encoding GetEncoding(int codepage)
Definition Encoding.cs:593
int EncodeString(string value, Encoding encoding)