سؤال

أنا أكتب برنامج AA C# الذي يعالج رسائل البريد الإلكتروني وإعادة توجيهها. لدي مكتبة POP3 وحجم MIME ، وأحتاج إلى نسخ شجرة MIME إلى أ System.Net.Mail.MailMessage.

ما هي أفضل طريقة لتعيين أجزاء MIME المختلفة إلى AlternateViewس، LinkedResourceرمل Attachmentس؟

تعديل: سيعمل ذلك مع جميع عملاء البريد (الإرسال والاستقبال)

هل كانت مفيدة؟

المحلول 3

الآن ، أقوم بنسخ أي شيء مع Content-Disposition وهذا ليس inline, ، أو مع فئة MIME من أي شيء آخر غير النص أو الصورة ، إلى Attachment, ، اى شئ inline, ، أو أي شيء مع فئة MIME Image إلى LinkedResource على عرض HTML أو العرض الأخير ، وأي شيء آخر مثل AlternateView. (لم أختبر هذا بعد)

نصائح أخرى

من نظرة عامة على مساحة 10000 قدم ، إليك ما سأفعله.

قم بتسطيح أجزاء MIME في شجرة. تأكد من أن كل جزء يحتوي على 1 ، وجزء واحد فقط (وليس أحد الوالدين مثل متعددة/ذات صلة ، أو شيء من هذا القبيل).

  1. تحقق من الشروط التالية للجسم:

    1. إذا كان الجزء الأول هو HTML ، فقم بتعيينه على جسم الرسالة

    2. إذا كان الجزء الأول هو نص عادي ، والجزء الثاني هو ليس HTML ، اضبط جزء النص العادي على جسم الرسالة.

    3. إذا كان الجزء الأول سهلًا ، والجزء الثاني هو HTML ، قم بإنشاء عرضين بديلين. *** هذا يفترض أن أيا من هذه الأجزاء لديه تفسير للمحتوى: رأس المرفق.

  2. حلقة من خلال ما تبقى من الأجزاء. أضف كل شيء آخر كمرفق ، باستثناء

    1. الصور التي لها مجموعة رأس معرف المحتوى ، أو

    2. الصور التي لديها مجموعة رأس محتوى محتوى.

      إذا كان أحد هذه الرؤوس موجودة ، فسأضيف تلك الصور على أنها LinkedResource (فقط إذا كان هناك بالفعل جزء من جسم HTML).

يجب أن تبدأ ذلك ، وتغطي حوالي 99 ٪ من البريد الإلكتروني العادي هناك.

قم بتخطيط أي جزء نص (نص/عادي ، نص/html وما إلى ذلك) الموجود داخل جزء متعدد/بديل إلى بديل. قم أيضًا بتخطيط جزء النص الأول الذي تمت مواجهته إلى Petaliceview ، بغض النظر عن نوعه الأم ، لتلبية احتياجات الرسالة التي تتكون فقط من جزء نص واحد.

قم بتخطيط الأجزاء المتبقية إلى المرفق أو LinkedResource ، اعتمادًا على رأس تحديد المحتوى.

قم بتخطيط تلك الأجزاء مع إبعاد المحتوى من المرفق ، إلى مرفق.

قم بتخطيط تلك الأجزاء مع تحديد محتوى من رأس محتوى ، أو عدم وجود محتوى ، إلى LinkedResource. يمكن أن تثير هذه الخطوة الأخيرة من خلال التحقق من أن معرف المحتوى يتطابق مع معرف المحتوى المشار إليه من جزء نص معين ، ولكن لأغراض عملية ، يمكن افتراض أن جميع LinkedResources التي تم إنشاؤها بهذه الطريقة تنتمي إلى النص الأول/HTML البديل (أو آخر البديل الذي تم إنشاؤه ، إذا لم يكن هناك مقابلة بديلة لنص Text/HTML).

قد لا تكون أفضل طريقة ، لكنني أحاول الحصول على البريد الإلكتروني "الخام" واستبداله فقط إلى البريد الإلكتروني الجديد

هممم ، هل تحتاج تمامًا إلى استخدام System.net.mail.mailmessage؟

System.net.mail.mailmessage يقدم فقط مجموعة فرعية صغيرة جدًا مما يقدمه MIME. لذلك ، إذا كان محلل MIME يهدف إلى دعم جميع الميزات القياسية الخاصة بك ، فإن هدفك المتمثل في نسخ رسالة MIME إلى MailMessage سيكون صعبًا في أحسن الأحوال والمستحيل في أسوأ الأحوال. ألا توفر المكتبة التي توفر وصول POP3 أيضًا الوصول إلى SMTP؟ إذا كان الأمر كذلك ، فسوف أترك system.net.mail.mailmessage بمفرده وأذهب مع كل ما توفره مكتبة حفلة Thrid.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top