jstedfast / MailKit

A cross-platform .NET library for IMAP, POP3, and SMTP.
http://www.mimekit.net
MIT License
6.04k stars 809 forks source link

MimeMessage.TextBody not returning body #1714

Closed seasonedtofu closed 4 months ago

seasonedtofu commented 4 months ago

Describe the bug MimeMessage.TextBody is not returning the text body, I can see that it exists within the body itself if I call MimeMessage.Body The response I get is null

Platform (please complete the following information):

To Reproduce Steps to reproduce the behavior: Call .TextBody on a MimeMessage

Expected behavior To return the text body instead of null

Code Snippets

var message = inbox.GetMessage(uid);
var test = message.TextBody;
Console.WriteLine(test);
jstedfast commented 4 months ago

The TextBody and HtmlBody properties follow a heuristic approach that is based on common MIME structures used by the most widely used mail client apps.

The problem with MIME is that there is no guaranteed way to always locate the 1 part that is the text body (or the html body) of a message. It's also very subjective.

I'll take a look at it, but I'll need an example message that illustrates the issue.

seasonedtofu commented 4 months ago

Here is what I get when I call MimeMessage.Body I am calling this on an email from outlook/owa Is there a correct way for calling TextBody on an email from outlook/owa?


Content-Type: text/html; charset="us-ascii"

<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
span.EmailStyle20
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="#0563C1" vlink="#954F72" style="word-wrap:break-word">
<div class="WordSection1">
<p class="MsoNormal">Test text body here<o:p></o:p></p>
</div>
</body>
</html>```
jstedfast commented 4 months ago

That's an html body. Where is the text body? :-)

(hint: there is no text body)