Лучший способ проанализировать строку адресов электронной почтыC#

Место общения программистов C#
Anonymous
Лучший способ проанализировать строку адресов электронной почты

Сообщение Anonymous »

Итак, я работаю с некоторыми данными заголовка электронной почты, и для полей to:, from:, cc: и bcc: адреса электронной почты могут быть выражены несколькими различными способами:

Код: Выделить всё

First Last 
Last, First 
name@domain.com
И эти варианты могут появляться в одном сообщении в любом порядке, все в одной строке, разделенной запятыми:

Код: Выделить всё

First, Last , name@domain.com, First Last 
Я пытался найти способ разобрать эту строку на отдельные имя, фамилию и адрес электронной почты для каждого человека (опустив имя, если только указан адрес электронной почты).

Может ли кто-нибудь подсказать лучший способ сделать это?

Я попробовал разделить запятые, что сработало, за исключением второго примера, где фамилия ставится первой. Я полагаю, что этот метод может работать, если после разделения я проверю каждый элемент и посмотрю, содержит ли он '@' или '', если нет, то можно предположить, что следующий элемент - это имя. Это хороший способ подойти к этому? Я пропустил другой формат, в котором может быть адрес?



ОБНОВЛЕНИЕ: Возможно, мне следует немного уточнить, в основном все, что я Я хочу разбить строку, содержащую несколько адресов, на отдельные строки, содержащие адрес в любом формате, в котором он был отправлен. У меня есть свои собственные методы проверки и извлечения информации из адреса, мне было просто сложно понять нашел лучший способ разделить каждый адрес.

Вот решение, которое я придумал для этого:

Код: Выделить всё

String str = "Last, First , name@domain.com, First Last , \"First Last\" ";

List addresses = new List();
int atIdx = 0;
int commaIdx = 0;
int lastComma = 0;
for (int c = 0; c < str.Length; c++)
{
if (str[c] == '@')
atIdx = c;

if (str[c] == ',')
commaIdx = c;

if (commaIdx > atIdx && atIdx > 0)
{
string temp = str.Substring(lastComma, commaIdx - lastComma);
addresses.Add(temp);
lastComma = commaIdx;
atIdx = commaIdx;
}

if (c == str.Length -1)
{
string temp = str.Substring(lastComma, str.Legth - lastComma);
addresses.Add(temp);
}
}

if (commaIdx < 2)
{
// if we get here we can assume either there was no comma, or there was only one comma as part of the last, first combo
addresses.Add(str);
}
Приведенный выше код генерирует отдельные адреса, которые я могу обрабатывать дальше.

Подробнее здесь: https://stackoverflow.com/questions/451 ... -addresses

Вернуться в «C#»