Добавьте «test-» в доменной части действующего адреса электронной почты в C # - PullRequest
1 голос
/ 27 июня 2019

У меня есть сценарий, чтобы преобразовать действительный адрес электронной почты в тестовую учетную запись, добавив «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 forто же самое: https://rextester.com/LPZI50439

По какой-то причине я не могу использовать опцию SpecifiedPickupDirectory, поэтому я запускаю фактическое электронное письмо.

Ответы [ 2 ]

2 голосов
/ 28 июня 2019

Вы можете использовать свойства 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 ...
}
1 голос
/ 27 июня 2019

Вы можете использовать заменить в вашем случае.

private string ToTestAccount(string emailAddress)
{
    return emailAddress == null ? emailAddress : emailAddress.Replace("@","@test-");
}

Обратите внимание, что это решение действительно только в том случае, если вам не нужно доставлять сообщение реальному пользователю. Если вам нужно изменить домен для его доставки, он может не работать, так как электронная почта может содержать более одного символа @. Как упоминалось в комментарии @ andyb952, это очень редко, но возможно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...