يقوم Outlook تلقائيًا بتنظيف فواصل الأسطر وإفساد تنسيق البريد الإلكتروني الخاص بي

StackOverflow https://stackoverflow.com/questions/247546

  •  05-07-2019
  •  | 
  •  

سؤال

أقوم بإرسال بريد إلكتروني باستخدام إطار عمل الدوت نت.إليك القالب الذي أستخدمه لإنشاء الرسالة:

Date of Hire: %HireDate%
Annual Salary: %AnnualIncome%
Reason for Request: %ReasonForRequest%

Name of Voluntary Employee: %FirstName% %LastName%
Total Coverage Applied For:  %EECoverageAmount%
Guaranteed Coverage Portion: %GICoveragePortion%
Amount Subject to Medical Evident: %GIOverage%

عندما يتم تلقي الرسائل في Outlook، يخبرني Outlook "تمت إزالة فواصل الأسطر الإضافية في هذه الرسالة".وتظهر الرسالة هكذا:

Date of Hire: 9/28/2001
Annual Salary: $100,000
Reason for Request: New Hire

Name of Voluntary Employee: Ronald Weasley Total Coverage Applied For:  $500,000 Guaranteed Coverage Portion: $300,000.00 Amount Subject to Medical Evident: $200,000

لاحظ كيف يقوم Outlook بإزالة فواصل الأسطر المطلوبة بشكل غير صحيح بعد الاسم، EECoverageAmount، وما إلى ذلك...

من المهم لمستلمي البريد الإلكتروني أن يحصلوا على بريد إلكتروني منسق بشكل صحيح، ويجب أن أفترض أن بعضهم يستخدم Outlook 2003.لا أستطيع أيضًا أن أفترض أنهم سيعرفون ما يكفي لإيقاف تشغيل ميزة التنظيف التلقائي لتنسيق الرسالة بشكل صحيح.

لقد قمت بعرض هذه الرسائل في عملاء بريد آخرين ويتم عرضها بشكل صحيح

بعض مزيد من المعلومات:

  • أنا أستخدم UTF-8 BodyEncoding (msg.BodyEncoding = System.Text.Encoding.UTF8)
  • تتم قراءة msg.Body من ملف نصي مشفر UTF-8، ويتم إنهاء كل سطر بـ crlf.

سؤال:كيف يمكنني تغيير تنسيق الرسالة لتجنب هذه المشكلة؟

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

المحلول

ابدأ كل سطر بمسافتين وسيتم "خداع" Outlook للاحتفاظ بالتنسيق الخاص بك.

لذا قم بالتغيير

Date of Hire: %HireDate%
Annual Salary: %AnnualIncome%
Reason for Request: %ReasonForRequest%

Name of Voluntary Employee: %FirstName% %LastName%
Total Coverage Applied For:  %EECoverageAmount%
Guaranteed Coverage Portion: %GICoveragePortion%
Amount Subject to Medical Evident: %GIOverage%

ل

  Date of Hire: %HireDate%
  Annual Salary: %AnnualIncome%
  Reason for Request: %ReasonForRequest%

  Name of Voluntary Employee: %FirstName% %LastName%
  Total Coverage Applied For:  %EECoverageAmount%
  Guaranteed Coverage Portion: %GICoveragePortion%
  Amount Subject to Medical Evident: %GIOverage%
^^ <--- Two extra spaces at the start of every line

هنا هو شرط لقد وجدت عند البحث في هذه المشكلة أنها تتعمق أكثر قليلاً من إجابتي.

نصائح أخرى

يمكنك أيضًا إدراج حرف علامة تبويب في نهاية من الخط (قبل CR LF مباشرة).ستكون هذه المساحة البيضاء الإضافية في نهاية السطر وبالتالي لن تكون مرئية للمستخدم.قد تفضل هذا على الاضطرار إلى إدراج مسافات على اليسار.لاحظ أن مسافة واحدة ليست كافية (على الرغم من أن المسافات المتعددة قد تساعد، لا أعرف.)

تتناول هذه الإجابة كيفية "تعطيل" الميزة من عميل Outlook.

  • انتقل إلى الأدوات -> "الخيارات ..."
  • في علامة التبويب "التفضيلات"، انقر فوق "خيارات البريد الإلكتروني ..."
  • قم بإلغاء تحديد المربع "إزالة فواصل الأسطر الإضافية في الرسائل النصية العادية."
  • اضغط موافق

لمعلوماتك: أنا أستخدم Outlook 2007

لقد كان حظي دائمًا أفضل في تنسيق رسائل البريد الإلكتروني بتنسيق html.ربما لا تزال تواجه مشكلة المستخدم النهائي المتمثلة في الاضطرار إلى تعيين العميل للسماح بتنسيق html، لكنه عادةً ما يكون أكثر دراية بهذا نظرًا لأن العديد من رسائل البريد الإلكتروني تأتي بتنسيق html.لديك أيضًا المزيد من العمل من جانبك بإضافة علامات html، ولكن النتيجة النهائية أكثر قابلية للتحكم.

@ephemient يقترح أيضًا: أرسل بتنسيق HTML ونص عادي.سيُظهر العملاء الجيدون الخيار الأخير، وسيُظهر برنامج Outlook الأول، وسيكون الجميع سعداء (باستثناء المبرمج الذي يتعين عليه القيام بمزيد من العمل).

لقد نجحت إضافة " " ( لـ TAB) بدلاً من " " في Outlook 2010.

التوسع على دوغ ل الإجابة، لأنني أعتقد أن رسائل HTML أصبحت أكثر انتشارًا ومقبولة الآن مما كانت عليه في عام 2008 عندما تم نشر هذه الإجابة.فيما يلي مقتطف صغير من c# للمساعدة في تحويل النص وإرسال الرسالة بتنسيق HTML:

body = string.Format("<font face='calibri,arial,sans-serif'>{0}<font/>", body.Replace("\r\n", "<br>"));

using (var smtpClient = new SmtpClient() { Host = smtpHost })
using (var msg = new MailMessage(from, emailDistribution, subject, body) { IsBodyHtml = true })
     smtpClient.Send(msg);

أرى نفس المشكلة عند إنشاء رسالة بريد إلكتروني بنص عادي ثم قراءتها باستخدام Outlook 2003 SP3.يبدو أنه يمكنك تجنب عملية الإزالة عن طريق إبقاء طول السطر أقل من 40 حرفًا.قد لا يكون عمليًا دائمًا.

ضع النص في <pre> سيتم تنسيق العلامات والتوقعات وعرض النص بشكل صحيح.

لقد قمت بتعريفه في CSS المضمّن في HTML Body مثل:

CSS:

pre {
 font-family: Verdana, Geneva, sans-serif;
}

لقد حددت عائلة الخطوط التي يجب تعيينها.

لغة البرمجة:

<td width="70%"><pre>Entry Date/Time:       2013-09-19 17:06:25
Entered By:     Chris

worklog mania

____________________________________________________________________________________________________

Entry Date/Time:        2013-09-19 17:05:42
Entered By:     Chris

this is a new Worklog Entry</pre></td>

يعد التنظيف التلقائي إحدى ميزات Outlook التي تزيل فواصل الأسطر الإضافية.يمكنك منع ذلك بطريقتين.

  • الطريقة الأولى هو إضافة مسافتين إضافيتين على الأقل قبل الأسطر أثناء إرسال البريد الإلكتروني من خلال الرمز.يمكنك إضافة هذه المسافات الإضافية فقط قبل تلك الأسطر التي يزيلها Outlook تلقائيًا.

  • الطريقة الثانية is to change outlook setting which will prevent outlook from removing extra line breaks.

enter image description here

enter image description here

يتضمن النص الخاص بي ' ' لكن Outlook 2010 لا يعرض فاصل الأسطر.قم بإنشاء رموز مميزة للأسطر المحددة بـ ' ' ورموز مميزة للمغلفات بواسطة علامات فقرة HTML.تنسيق البريد الإلكتروني الخاص بي هو HTML.أقوم بإنشاء نص HTML لبريدي الإلكتروني في الكود أدناه.

string[] tokens = Regex.Split(objTickt.Description, "\r\n");
  if (tokens.Length > 0)
  {
     foreach (string line in tokens)
     {
         //htmlTW.WriteEncodedText(objTickt.Description.Replace("\r\n", "\n\n"));
         htmlTW.RenderBeginTag(HtmlTextWriterTag.P);
         htmlTW.WriteEncodedText(line);
         htmlTW.RenderEndTag();
     }
  }

قم بتغيير إنهاء الخط من crlf إلى cr أو lf.

أظن أن الجزء العلوي من البريد الإلكتروني يستخدم فقط cr (أو lf)، ويتوقع Outlook أن تتبع بقية رسالة البريد الإلكتروني نفس التنسيق.

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