एक ईमेल हेडर में एक charset के रूप में utf-8 या "utf-8" का उपयोग करना चाहिए?


2

अग्रेषण चालू करने के साथ एक Outlook.com को एक ईमेल भेजते समय, मुझे पता चलता है कि अग्रेषित मेल अस्वीकार कर दिया गया है।

भेजे गए मेल और आउटलुक के इनबॉक्स में बैठे मेल की जांच करने पर। मुझे लगता है कि Microsoft के पास मेल बॉडी के अनिवार्य रूप से पुन: लिखित भाग हैं।

उदाहरण के लिए

This is a multi-part message in MIME format.
--=_5226908e44ebc0462f06052400644d2f
Content-Type: multipart/alternative;
 boundary="=_926d2a45bc543e1972443c87118fa61a"

--=_926d2a45bc543e1972443c87118fa61a
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset=utf-8

SGF2aW5nIGFub3RoZXIgZ28gYXQgZm9yd2FyZGluZyBhbiBlbWFpbCB2aWEgT3V0bG9vay4NCg0K
DQo=
--=_926d2a45bc543e1972443c87118fa61a
Content-Transfer-Encoding: base64
Content-Type: text/html; charset=utf-8

निम्नानुसार बन जाता है; charsetमूल्य के आसपास के उद्धरणों पर ध्यान दें :

--=_5226908e44ebc0462f06052400644d2f
Content-Type: multipart/alternative;
boundary="=_926d2a45bc543e1972443c87118fa61a"

--=_926d2a45bc543e1972443c87118fa61a
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"

SGF2aW5nIGFub3RoZXIgZ28gYXQgZm9yd2FyZGluZyBhbiBlbWFpbCB2aWEgT3V0bG9vay4NCg0K
DQo=
--=_926d2a45bc543e1972443c87118fa61a
Content-Transfer-Encoding: base64
Content-Type: text/html; charset="utf-8"

अब इस तथ्य से अलग कि मेल RFC विशेष रूप से वैसे भी शरीर को संशोधित करने से मना करता है (जो DKIM हस्ताक्षर को तोड़ता है) मुझे पूछना होगा कि charset=utf-8ईमेल हेडर में लिखने का सही तरीका क्या है?


आउटलुक और एक्सचेंज मूल ई-मेल को बरकरार नहीं रखते हैं; यह अच्छी तरह से परिभाषित व्यवहार है।
डैनियल बी

जवाबों:


2

RFC2045 खंड 5.1 में प्रदान करता है, जिसका उपयोग Content-TypeMIME संदेशों में मान्य शीर्ष लेख बनाने के लिए किया जाता है :

5.1.  Syntax of the Content-Type Header Field

   In the Augmented BNF notation of RFC 822, a Content-Type header field
   value is defined as follows:

     content := "Content-Type" ":" type "/" subtype
                *(";" parameter)
                ; Matching of media type and subtype
                ; is ALWAYS case-insensitive.

     type := discrete-type / composite-type

     discrete-type := "text" / "image" / "audio" / "video" /
                      "application" / extension-token

     composite-type := "message" / "multipart" / extension-token

     extension-token := ietf-token / x-token

     ietf-token := <An extension token defined by a
                    standards-track RFC and registered
                    with IANA.>

     x-token := <The two characters "X-" or "x-" followed, with
                 no intervening white space, by any token>

     subtype := extension-token / iana-token

     iana-token := <A publicly-defined extension token. Tokens
                    of this form must be registered with IANA
                    as specified in RFC 2048.>

     parameter := attribute "=" value

     attribute := token
                  ; Matching of attributes
                  ; is ALWAYS case-insensitive.

     value := token / quoted-string

     token := 1*<any (US-ASCII) CHAR except SPACE, CTLs,
                 or tspecials>

     tspecials :=  "(" / ")" / "<" / ">" / "@" /
                   "," / ";" / ":" / "\" / <">
                   "/" / "[" / "]" / "?" / "="
                   ; Must be in quoted-string,
                   ; to use within parameter values

ध्यान दें कि कैसे valueपरिभाषित किया गया है token / quoted-string

अनुभाग में आगे एक उदाहरण के साथ एक पाठीय स्पष्टीकरण है:

   Note that the value of a quoted string parameter does not include the
   quotes.  That is, the quotation marks in a quoted-string are not a
   part of the value of the parameter, but are merely used to delimit
   that parameter value.  In addition, comments are allowed in
   accordance with RFC 822 rules for structured header fields.  Thus the
   following two forms

     Content-type: text/plain; charset=us-ascii (Plain text)

     Content-type: text/plain; charset="us-ascii"

   are completely equivalent.

जैसा कि आप देख सकते हैं, जब पहले से ही मूल्य एक ( ) है, लेकिन फिर भी मान्य नहीं है, तो उद्धरण की आवश्यकता नहीं है ।token1*<any (US-ASCII) CHAR except SPACE, CTLs, or tspecials>


धन्यवाद मुझे लगता है कि अद्यतन RFC 5322 है - लेकिन टिप्पणी अभी भी प्रासंगिक है। इसके अलावा Microsoft ने शरीर के बेस 64 पाठ को डिकोड किया और फिर इसे फिर से एन्कोडिंग से पहले बेस 64 पर संशोधित किया। यह RFC822 और 5322 के सीधे उल्लंघन में है जो बताता है कि एसएमटीपी सर्वर को ट्रेस हेडर जोड़ने के अलावा संदेश को संशोधित नहीं करना चाहिए। परिणामस्वरूप सर्वर द्वारा अग्रेषित मेल को अस्वीकार कर दिया गया था। मुझे उन पर विलाप करना पड़ेगा।
रेवनस्टार 68

संदेश को अग्रेषित करते समय, Outlook.com एक रिले पार्टी नहीं है।
डैनियल बी

निर्भर करता है कि आपने अग्रेषण कैसे सेट किया है। यदि आप नियमों का उपयोग करते हैं तो यह उसी तरह से आगे बढ़ता है जैसे कि आप संदेश को मैन्युअल रूप से अग्रेषित करते हैं। यदि आप फ़ॉरवर्डिंग सेटिंग्स का उपयोग करते हैं, तो यह रिले के रूप में कार्य करता है जहाँ तक कि प्राप्त सर्वर का संबंध है। मेरे सर्वर से मूल DKIM हेडर अभी भी है और इसका उपयोग अंतिम सर्वर द्वारा किया जाता है ताकि मेल बॉडी को चेक किया जा सके।
रेवनस्टार 68

1

अच्छा प्रश्न। मेरे अनुभव में, HTML ईमेल हेडर HTML (वेब ​​सर्वर) हेडर की तुलना में बहुत अधिक भिन्न नहीं हैं, इसलिए मैं इस तरह से गैर-उद्धृत संस्करण को सुरक्षित करूंगा:

Content-Type: text/html; charset=utf-8

और MIME एन्कोडिंग के लिए RFC ( RFC 2047 ) में गहरी खुदाई से मुझे यह मिला:

2. Syntax of encoded-words

   An 'encoded-word' is defined by the following ABNF grammar.  The
   notation of RFC 822 is used, with the exception that white space
   characters MUST NOT appear between components of an 'encoded-word'.

   encoded-word = "=?" charset "?" encoding "?" encoded-text "?="

   charset = token    ; see section 3

   encoding = token   ; see section 4

किसी भी बिंदु पर यह उल्लेख नहीं किया गया है कि उद्धृत टोकन मूल्य वैध हैं या नहीं। इसलिए मैं यह मानने जा रहा हूं कि Microsoft किसी भी तरह हेडर को उद्धृत मानों के लिए फिर से लिख रहा है? उपलब्ध कराए गए साक्ष्य का कोई सुराग नहीं है, लेकिन मैं जो कुछ भी Microsoft कर रहा हूं उसे डिफ़ॉल्ट करने के बजाय निर्विवाद मूल्य का उपयोग करने के लिए स्थगित कर दूंगा।


1
वह एक एन्कोडेड शब्द नहीं है। प्रासंगिक RFC 2045 है , जो आगे RFC 822 को संदर्भित करता है ।
डैनियल बी

@ डैनियलबी मेला काफी अपने उत्तर को उकेरा जो स्पष्ट रूप से बिंदु पर कहीं अधिक है।
जेकगोल्ड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.