我有一个场景,通过在电子邮件地址域中添加“test-”将有效的电子邮件地址转换为测试帐户。这样在测试环境中它就不会到达实际的接收者。此外,我在密件抄送中添加了我的电子邮件地址以验证该电子邮件内容。
到目前为止我尝试了什么:
{
MailMessage msg = new MailMessage();
// already valided the "emailAddress" is the valid one or not
msg.To.Add(new MailAddress(ToTestAccount(emailAddress)));
// other code ...
}
调用方法ToTestAccount()在电子邮件地址中添加“test-”。
private string ToTestAccount(string emailAddress)
{
var userAlias = emailAddress.Split('@')[0];
var host = emailAddress.Split('@')[1].Split('.')[0];
var hostDomain = emailAddress.Split('@')[1];
var indexOfDot = hostDomain.IndexOf('.');
var domain = hostDomain.Substring(indexOfDot, hostDomain.Length - indexOfDot);
return userAlias + "@test-" + host + domain;
}
该功能产生了我预期的结果。示例数据和预期输出:
Email Address | Expected
----------------------------------------------------------
arulkumar@gmail.com | arulkumar@test-gmail.com
arul.kumar@gmail.com | arul.kumar@test-gmail.com
arulkumar4@gmail.co.in | arulkumar4@test-gmail.co.in
arul.kumar4@gmail.co.in | arul.kumar4@test-gmail.co.in
但是有没有其他方法可以达到预期的结果,我的意思是使用更少的字符串函数或最佳实践来实现它?
同样的 C# Fiddle:https://rextester.com/LPZI50439
出于某种原因,我无法使用 SpecifiedPickupDirectory 选项,所以我触发了实际的电子邮件。
请您参考如下方法:
您可以使用 MailAddress 属性,这将导致更少 字符串操作并处理一些奇怪的有效电子邮件地址。
private string ToTestAccount(string emailAddress)
{
var originalEmailAddress = new MailAddress(emailAddress);
return $"{originalEmailAddress.User}@test-{originalEmailAddress.Host}";
}
或者如果您需要支持显示名称,您可以使用扩展方法:
public static MailAddress Testing(this MailAddress address)
{
return string.IsNullOrEmpty(address.DisplayName)
? new MailAddress($"{address.User}@test-{address.Host}")
: new MailAddress($"{address.User}@test-{address.Host}", address.DisplayName);
}
这将允许这样的用法:
{
MailMessage msg = new MailMessage();
// already valided the "emailAddress" is the valid one or not
msg.To.Add(new MailAddress(emailAddress).Testing()));
msg.To.Add(new MailAddress(aDifferentEmailAddress, displayName).Testing()));
// other code ...
}
