Skip to main content
 首页 » 编程设计

c#之在 C# 中的有效电子邮件地址的域部分添加 "test-"

2024年02月25日31cloudgamer

我有一个场景,通过在电子邮件地址域中添加“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 ... 
}