В System.Net.Mail нет метода, позволяющего вам это сделать. Вам придется написать парсер, а затем создать почтовое сообщение вручную. Это не так сложно сделать. Вот структура электронного письма:
Во-первых, у вас будут заголовки, которые выглядят как HEADER-NAME: CONTENT, а заголовок заканчивается символом / r / n, за которым НЕ следует символ пробела. Если заголовок имеет / r / n, это означает, что значение заголовков продолжается на следующей строке. Для Content-Transfer-Encoding вам необходимо потенциально декодировать байтовую кодировку (quoted-printable или base64) в теле сообщения. После заголовков у вас будет само тело письма, которое отделено от заголовков дополнительной строкой (\ r \ n \ r \ n). Это может быть просто текст, HTML или что-то еще, и в этом случае просто анализируйте его буквально и декодируйте в соответствии с кодировкой передачи. Кодировка для печати в кавычках для тела немного отличается от заголовков, так что читайте его в RFC 2045, 2046 и 2047. Содержимое в кодировке Base64 будет иметь символ новой строки между строками, но в остальном ничего особенного.
Если у вас есть вложения и прочее, тогда вы должны быть немного умнее. Обычно они идут после тела и имеют заголовок Content-Type, который расскажет вам, как декодировать вложение и некоторую информацию о нем, а также, возможно, заголовок Content-Disposition, который предоставляет некоторые метаданные о вложении. Вложения обычно основаны на 64 кодировке.
Наконец, если вы видите multipart / mixed под заголовком типа содержимого сообщения, это означает, что вам нужно проанализировать каждую часть по отдельности. Это даст вам строку символов, которые обозначают границу между частями. Каждая часть будет иметь собственный тип контента, который говорит, что это такое, а также другие заголовки, которые помогают описать эту часть. Вам придется разобрать каждую из этих частей, а затем декодировать их вручную, записывая вложения либо в потоки в памяти, либо в файл.
Когда у вас все это есть, вы можете заново создать электронное письмо в коде. В команде NCL были разговоры о том, чтобы как-то решить эту проблему, но ничего не решено, и я ничего не могу обещать.
В качестве примера, вот как будет выглядеть файл .eml с некоторыми пользовательскими заголовками, двумя альтернативными представлениями (один текст, один html), связанным ресурсом для представления HTML, представляющим изображение, и вложением .txt. Я включил Unicode, чтобы вы могли видеть механизмы кодирования. Примеры компаний, организаций, продуктов, доменных имен, адресов электронной почты, логотипов, людей, мест и событий, изображенных здесь, являются вымышленными. Никакая связь с какой-либо реальной компанией, организацией, продуктом, доменным именем, адресом электронной почты, логотипом, персоной, местами или событиями не предназначена или должна быть выведена.
X-Sender: noreply@example.com
X-Receiver: "Дейв Барнетт"
X-SalesAgent: =? Utf-8? B? VG9sbGV2c2VuLCBCasO4cm4 =? =
MIME-версия: 1.0
От: noreply@example.com
Кому: "Дейв Барнетт"
Ответ: =? Utf-8? Q? Толлевсен, _Bj = C3 = B8rn? =
Приоритет Х: 5
Приоритет: не срочный
Важность: низкая
Дата: 28 августа 2009 г. 13:03:40 -0700
Тема: детали заказа
Тип контента: составной / смешанный; граница = - boundary_2_1e984f0b-dc01-4739-a9c2-8302dc7c9c15
---- boundary_2_1e984f0b-dc01-4739-a9c2-8302dc7c9c15
Тип контента: составной / альтернативный; граница = - boundary_0_61ec80d2-1bf7-4554-922e-634e8e8a1067
---- boundary_0_61ec80d2-1bf7-4554-922e-634e8e8a1067
Content-Type: multipart / related; тип = "текст / html"; граница = - boundary_1_e1f66bde-4086-4084-ad21-245b55a3d7a0
---- boundary_1_e1f66bde-4086-4084-ad21-245b55a3d7a0
Content-Type: text / html; кодировка = UTF-8
Content-Transfer-Encoding: base64
PEhUTUw + PEJPRFk + WW91ciBvcmRlciBoYXMgYmVlbiByZWNlaXZlZC48YnIvPk9y
ZGVyIDxhIGhyZWY9aHR0cDovL3d3dy5jb250b3NvLmNvbT5zdGF0dXM8L2E + PGJy
Lz48aW1nIHNyYz0iY2lkOmNvbXBhbnlMb2dvIiAvPjwvQk9EWT48L0hUTUw +
---- boundary_1_e1f66bde-4086-4084-ad21-245b55a3d7a0
Тип контента: изображение / JPEG; Имя = logo.jpg
Content-Transfer-Encoding: base64
Content-ID:
/ 9J / 4AAQSkZJRgABAQEAYABgAAD / 2wBDAAIBAQIBAQICAgICAgICAwUDAwMDAwYE
BAMFBwYHBwcGBwcICQsJCAgKCAcHCg0KCgsMDAwMBwkODw0MDgsMDAz / 2wBDAQIC
AgMDAwYDAwYMCAcIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM
DAwMDAwMDAwMDAwMDAz / wAARCAAvAPUDASIAAhEBAxEB / 8QAHwAAAQUBAQEBAQEA
AAAAAAAAAAECAwQFBgcICQoL / 8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIh
MUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6
Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZ
mqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4 + Tl5ufo6erx
8vP09fb3 + PN6 / 8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL / 8QAtREA
AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAV
YnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hp
anN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPE
xcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3 + PN6 / 9oADAMBAAIRAxEAPwD9
/ KKKy / G3jTS / hz4S1HXdbvI9P0nSYGubu4cErFGoyTgAkn0ABJPABNVCEpyUIK7e
yJnOMIuc3ZLVt7JGpRXz1 / w9V + An / Q + F + UTUf / ketHwl / wAFKvgp478U6bomk + М3
vdU1e5js7SBdG1BTNLIwVFyYABkkckgDua9uXC2cxi5SwlVJf9O5 / wCR8vDjrhuc
lGOYUG3sva0 // kj3SiiivCPqgooooAKKKKACiiigAooooAKK81 + On7X3w6 / Zq1Sw
svG3iNNFutTiae2i + xXNy0iKdpY + ТГ + 0Z4 + bGcHGcGu88M + I7Pxh4csNW0 + R5rDU
7eO6tpHieJnjdQyko4DLkEHDAEdxXVUwOJp0Y4ipTkoT + GTTUXbez2dvI4aWaYOr
iZ4KlWjKrCzlBSTlFPZyje6vdWutbl6iiiuU7gooooAKKKKACiiigAooooAKKKKA
CiiigAooooAK + Ov + C0Pxl / 4Qj9nLT / ClvLsvPGV + FlUNgm1t9sj / APkQwj3BNfYt
FKV / WVP + Mf8AwtX9ru / 0uGcHTvB8EekRnOUEv + snbjnId9h / 65Cv0Hwxyf6 / n1Jy
V40vff8A278P / kzX3H5T408Q / wBk8KYhwdp1rUo / 9v35v / JFL52LH7E1h + ZLB / DC
9n + Mt8J / Etxft9ntxHqoFrbBFC5NqAhLNvPJJA29ORX2H + yb8EP2a / G2vS + L / HDO
aajrHhOQGK5muNWiihneNwo / 0o7GOM8hW25BxnbXifh2y / YU07w / YW9 / eNqF9Bbx
x3F0yeIENzIFAaQqoCjcQThQAM8AV9I / DP4l / A79lD9lSfxn4NYaZ4C1G5luoMC6
Nxqt1 / qikS3R81nJh2gHCgIW4UFq + u4xzCvXU5YVY6E6slGMZ3jRd9OVRWruk7R3
e76n5v4cZRhsM6NLGvLKlKjBzlKDVTEK2vNKT0XLJrmlsloujPOPgz / wV6tviD8d
rbwX4j8Dx + Do2mube81GfXhNHYPDHIzb1aCMY3RlSSwxnPatPwN / wVHvPjr8fJvB
Xw0 + HE3iu1SQ7dYutZOnwLCuA9zKv2eQxxAnjJLNlQF3MEr89fj7 / wAJD8dda8T /
ABhHhY6L4W1vW / с / mxNmBLh0LCMFjukchCzso27ieF3Ktfef / BO74v8Agb4Lf8E7
tV8aW2mJbXHh55x4g8rm41C7QjyhuP8AfWWFVHCqXPuT18R8IZNl + BWOoYXnqS5a
fs1OTjCrLVuTUuZtXUUk7bd7rj4R8QeIs3zeWU1sd7OjF1KqrSpwU6lCDsowi4KC
TtKTk4trX + XlfY / TZ / 8ABUnwh + у / rsvh2HTbjxV4ttVQ3VlaXKw2lkxwTHJcFSd4
U5AWNvRthNeVeBf + C5ml674v0 + y1r4d3ek6ZdTCKe8ttZF5Jbg8BhEYI9wzjPzgg
ZIyQAfDPCf7Z5 + К / xnk8RXOq / С / 4IC1mluV1Sy8CrrOq3Ukm8h / MaCVnlHCu5khB
DkgNyo5n9mHwdqX7XH7eOjw63rGteKIItQa / vb7U1MdzLa2xLgOm9 / KDEImxWITf
gHAruwPAOT4XBVP7VwzvTpucp89S97O6jaKpu1tEpSa0UkeXnHivxDjswg + H8auW
rVVOnD2dKzTas5c0nWV72bdOEXrytWP0J / ш / b5sv2Ko / D0X / CP / APCTahr5mcWw
1D7H9nij2guW8uTOWcADA6NzxXjnjj / GT / 4f8Pabo40rwVca3qVzapPqUQ1YQW1h
Iyq3kxy + SxmZckMdiKCPlLDmvBf2qLy6 / ЧД / 4KWJ4VsZZJ9Ng1KLw / CUfiC2gJN1
KO3BE7 ++ BWP / wVt8T2fij4 / + Efhj4X063ht / BVhFp1tbWyhQk9z5ZWBVHAAjWAD3
Y1wZHwXky + o4LHUHOtVhKrUfPKKjH7N0n3ajpy6ptt7P2OKvEjiLmzbMcrxSpYbD
1IUaS9nGTnUulPlk1vZSlrzLlaSjd8y9w8cf8FvfBui + EtFuNC8K6trmtXsKS6hZ
TXIs4NNYhg8fnlHMrBguCsYUq4O4MCg9f + С / 7fei / Fv9k3xF8UpdGudHj8Li5S90
+ S5EoaWJFdEjlCjcHEkYBKAhmIwQAT8p / wDBUu10X9n / APZz + Fvwe0mG0E9gP7Vv
WjVQ5dIzEZW75lkkmYn / AGKy / wBpb / JGL / gmX8O / ч + п + j638QZv7c1VMbXMfyzbW
HqN1sn / bI1zf6pZHjcFhZYKhKEq9Zxi3NtunFycpW0SXKtNLrT3nudcOPeJ8szXF
080xMakMLhVOpFU4xSrSjFQhfWTk5yV3dRd5WgrJL0zQf + С5 + iXPh3VbnUvAN7Z6
hbhF0 + zt9WFwLxzuLGSQwoIkXaoyA7EuMJgEj1 / 9 Гц / go5pf7ZniPVtEbw5ceGda
023 + 2pCb0XkNxAGRGYPsjIYM4 + Xb0IOeoHyN + y1 + 1l8Lf2cv2GfFOnRxfa / ib4lW
7tLi1bT3YzrIpjh3TFdhgRDuKFs7i / y85Mv / AAT18N3f7Ov7O / хО + OmowNarBpD6
R4deXK / ap3dQXUHqvnCFNwzyJB / Ca6874OyeOExnscJKjOM406UnOXvybS92LesW
+ R5rq7TVrLz + GfETiKrjstVfMYYiE4TqV4xpwXsqcbu85RWklG + iULNJNPmu8X9o
FVH / AG6f + Cmlv4eti0ukQ6pHoMZVsgWlszG4kB98TuPYivs39qn / AIKY + AP2UdQl
8OW1vc + JvE1lEEOm2DLFb2RAXbHNMchCVJ4RXYbfmVcgn5R / 4JQfDm907R / id8WU
tpby / wDCujXFtpAI3 + fdtC0sh55LBVjHuJj1r58 / Z7m0fxF8Tr7WfFHxU1b4Z6nE
HvbfXLXTbm / uJ7h2IkXdbuskbMrsd3QjcCRkZ9rGcN4DH4r6jWblQwFOMeWPM3Kc
ld35VKVrKN + VN3b7M + cwHGmaZXg5ZxhlGOKzatOSnNxUadKm7KznKML3lJLmko2S
vumfbHw3 / wCC5OgeIfF9pZeJfAt74e0q5cRyahbaqL82xJADNGYYzsGSWKsWAHCs
ек + 7I5FljV0YMrDIIOQR61 + Sfwm / Z + 0r9tz45R6dH8Rvip43n08rHdavqXhqN7eG0V2ILTzak0kaN82xShbLH5M5Ffb2lf8ABTXwDqfx / T4Y6Vovi / UdaXVDoyTW1rbG
zMiMUdw7ThvLXaxJ25wpwDXwXGvCmCVWnTyKhJTjFyqx9 + 0Y6crftEmr6 / JBI / Уф
DbjzM3RrVuKcTB0pTjCjP92nObvzRSouUXb3e + r3ey9X + P37RPhP9mfwHN4h8Wak
tlarlLeBBvub6TGRFCnVmP4KOrFRk18b63 / wXdsrfWLlNN + GV1d2CSMLea515bea
VM8M8a27hGI6qHYD1NeQf8FhPHWo + JP2who2qPdxaJ4esbaOzjUAjZKqySyoCcFm
Y7c5GfKUHpXuvxV / 4KWfAj4b / CzQ / Bng7wfZfEDw6xSO40mSwNnZWkakPuZbiAiW
YyYbAQgtuYuDjPoZPwXhaGX4XEVsFPGVMR71oycI046NXkrLmae0mk3daW187iXx
IxuIzfHYHD5jTy + jhLLmlBVJ1Zu6aUXd8qe7hGUkrSs07L6V / Z6 / bA8J / Tb / Ambx
9bzPoel6aZI9VXUWWP8As2SNVaQM + drJtZWDDqGGQGyo + cvit / wXC8J + GfELWnhL
whqfiqyiZ0e9ur0aYkpBwrRIY5HZCOcuI2H92uU / 4KjavB4T / ZL8E2nhHwY3w78O
eNNSe + 1TSxpsGnTb441MCXEcBKBmA37SSw8pM4K4HLfAH9sX4Sfs9f8ABP7U9AsI
vt3xF8RWl1balZtpj7riWQypE80xXy2hjjZcKHJ5Pygs1LKeD8vnhnmiws66qVXC
FJSa5FdpynOOtk07O9trt3ujPfELNqeMp5FLH0sNKFD2tTESgnzt2cY06c7K8k1d
Wvfm5UuWz + tf2Jv + Кг / h39swX9hDpd14c8SaXCLmfT5p1uI5YS5XfFKApcD5N25F
wZABuHNeZ67 / Амфж / D3hz4 + av4Uu / DHl + H9Fvbm1m10aqWaQQBgWjtxB8xd12qvm
YO4EkDJHgn7DXgrVv2Xv2a / iP8cdUjm003WiNpHhpZDsa6kmkUCcLjO0SCLac8gS
HGADWj / Wsj + G1hoY8d / GXxLAkuneDbKRLS4mwxWbyzLcSLnkOsQVc9xOw9a68Zwj
kGFqZhjOR1KNLlhCKk / 4srXSle75W4rXmtd3TsedlniBxZj8PlGXKoqeKxEpVJzc
I / wI3tKUWkkpJS1jyXUVZrmuepeDv + C4fhbXPiVFp + д + DtQ0PwxNO6f2w9 / 9onhj
wdkj2yRdzt3KsjFcnG / GDXuv + C53h4 + Pks7XwDq83h17iOM6hLqUcd4Izje / 2YIy
5BLYXzvmAGSucDw // gmz8OU / а ^ / bg1bxjrdhBJp + lTXPiS6hdQ8K3M0pMKHPXa7s
4 / 65VVttNtv24P8AgqlO1vDFPoV1rvnTMigxzWNkgBYn0lWEDJ7yivXqcI8MUsdV
w9XDNRo0faVH7SVovdLu5NXd78tkrR1PnY + IPG1fKaWMw + Ni5V8V7KkvYwUpxtvq
rKClyq3K53k7zskn + s0cgljVlOVYZB9RS0UV / Ox / YCvbUKKKKBhRRRQAV4N4h / 4J
к / BDxVr99qmoeCnur / UriS6uZm1rUA00rsWdjifGSxJ49a95oruwOZ4zBNywdWVN
vflk439bNHmZnkuXZlGMMxoQrKOqU4xkk + 65k7Hz1 / w6q + An / Qh / + VvUf / комплект / х
/ WAE / PhJ8QtL0Sx1jwvcXtj4ctFsdMtjrWoJDZRAAYRFnCgtgbmxucgFiTXs1Fds
uJs4lJTli6rcdn7SWnTTXTTQ8ynwVw9CEoQwFFKSs0qULNJppP3dVdJ69UmcL4s /
Zn8C + N / г / б + AdR8PWr + ELQRLDp0MstukflncpDRsr5zyTuyxJznJrM + Gn7HPw2 + E
Pg3XvDug + GYrbQ / E6hdTsri8uLyG6AUqMrNI + 04J5XBOB6DHptFcizbHKlKgq0 + S,
T5muZ2crp8zV7N3Sd97pHoPIcsdeGJeGp + 0hHkjLkjzRjZrli7XUbNqy0s2ras8a
+ GF / AAT6 + Dnwh8UR6zoXgbT4dTgx5M11c3F99nYMrB41nkdUkBUEOoDDsRk1o / В7
9in4ZfALxrc + IvCXho6TrN3byWstz / aV3OXjdlZhtllZRlkU5Azx1r1Sita2fZnV
UlVxFSXOrSvOTuuzu9Vq9Gc + H4VyXDuDoYOlHkfNG1OC5ZfzRstHotVroeUfCj9i
D4X / AAR8ft4p8M + Fxp + vukiG8fUbu5bEn3ziWV1BPrjPJ55NMuf2F / hXefGD / СЗЗ
/ C3n + LPt41P7dLqV2 / 8ApAYMr + WZfL4IGF27RgYHFetUUPPcydR1XiJ8zXK3zyu4
/ WArd728thrhfJlRWHWEpcilzqPs4WU9ue1rc1vtb + Z5N8YP2Gvhb8fPG58R + LVD
B1jWDEkHnvqd5EojTO1QkcqoAMn + HnJznNfFv7ePwY + IH7VX7dNhpVp4P8Ww + EdO
ktNDg1P + yJ1sYodwaecS7Nm0F3 + bOCEFfpXRXscP8Y43K6yrNupyRcYKUm1Dmtdx
Wy2tZWVj57i3w9y7PMLPCpKj7WcZVZQjFSqct7Rm7Xervd3aa06niWof8E4 / gnqn
i2LW5 / AGltfxPHJhZp47Z2QDBa3WQQtnA3AoQ5JLA5Oe6 + KX7Png / wCM3w6t / CXi
HRY7rw3atE0On288tlFH5Q2xqPIZCFUdFztGBxwMdnRXi1c6zCpKE6lebcPhblJu
Р + HXT5H0lDhvKaEKkKOFpxVVWmlCKU091Ky95Pre5yfwZ + BvhX9nvwb / AMI / 4P0l
NG0kzvdGBZ5Zi0rgBmLyMzEkKo5PAAFebeKv + CaPwO8Z + IbrVL3wDZrd3r + ZKLS /
u7OHdgDKxQypGvT + FRk5PUmvdaKKOdZhRrTxFGvOM5 / FJSkm / Vp3fzDEcN5RiMND
B18LTlSh8MHCLjH / AAxasvkjnvht8KPDXwe8LR6L4W0TTtB0yPGYbOEReYwVU3uw
+ Z5CqqC7EscckmuD + GX7CXwp + DvxEi8WeHfCosvEMBlZLyTUry5ZTIpVztllZckM
wzjPJr12is4ZpjYe05K0l7TSdpP3l / e197d733NamRZbUVGNTD02qLvTvCL5HprD
T3XotVbZHnvxx / ZT + Hv7SK2p8aeF7HWprIjyLjfJb3KKN3yedEySFMsx2FtuTnGQ
DWP8I / 2FfhL8DPEP9reGfBWm2epqVaO6uZZr6W3Zc4aJp3cxNyclNpPfNetUVdPO
cwhh / qkK81T / AJVKXL / 4De34GdbhzKa2LWPq4WnKsvtuEXPTb3mr6eph / Eb4aaB8
XfCN3oPibSbLWtIvV2y21ym5c44ZT1VxnIZSGU8gg15V4O / 4JtfBDwLrseo2Pw + 0
ya5iUqq39zc6hDyMZMVxI8ZPoSuR1GDXuNFThc3x2Gpyo4atOEZbqMmk / VJ2ZWPy
DK8dVjiMbhqdScfhlKEZNa30bTa1106nIfGf4D + FP2g / B6aB4v0ttV0iOdLkWy3c
9sPMUEKSYXQkAMeCce3ArK0P9lDwB4a + Cl78O7DQPsvg / US5ubCO + uQZi7BmzN5n
m8lR / H0GOnFeiUVFPMsZTpKhCrJQT5klJpKS2kle1 / Pc1q5NgKtd4qpQg6jjyOTj
Fy5HvG9r8r / lvbyPOPg9 + yT8PfgDomt6d4Q8P / 2Na + IkEeoBL65lknUKygB5JGdM
B2xtIwTnrzVP4I / Sv / DH9nLxVPrfg3wwmj6pc2zWck5v7q5JiZlYqBNI4GSi8gA8
dcV6nRWs85zCftOevN + 0tz3lL3raLm196y0V72Oenw3lFNUVTwtNexbdO0Irkbd2
4ae629Xy2u9WFFFFeae0FFFFABRRRQB // 9k =
---- boundary_1_e1f66bde-4086-4084-ad21-245b55a3d7a0 -
---- boundary_0_61ec80d2-1bf7-4554-922e-634e8e8a1067Тип контента: текстовый / простой; Charset = US-ASCII
Content-Transfer-Encoding: цитируемый для печати
Спасибо за ваш заказ.
---- boundary_0_61ec80d2-1bf7-4554-922e-634e8e8a1067 -
---- boundary_2_1e984f0b-dc01-4739-a9c2-8302dc7c9c15
Тип контента: составной / смешанный; граница = - boundary_3_5116e4dc-187а-4025-8b7f-9e74f87a79d1
---- boundary_3_5116e4dc-187а-4025-8b7f-9e74f87a79d1
Content-Type: application / octet-stream; имя = order.txt
Content-Transfer-Encoding: base64
Содержание-Диспозиция: вложение; имя файла = order.txt; дата создания = "пт, 28
Авг 2009 13:03:40 -0700 "
T3JkZXIgc3VtbWFyeToNCg0KV2lkZ2V0czogIDIwDQpTcHJvY2tldHM6IDE1DQoN
ClRoYW5rIHlvdSBmb3IgeW91ciBvcmRlcg ==
---- boundary_3_5116e4dc-187а-4025-8b7f-9e74f87a79d1 -
---- boundary_2_1e984f0b-dc01-4739-a9c2-8302dc7c9c15 -