Skip to content

gh-133311: have MIMEImage respect policy.max_line_length #133322

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 4 commits into
base: main
Choose a base branch
from

Conversation

vedant713
Copy link

@vedant713 vedant713 commented May 2, 2025

This patch updates Lib/email/mime/image.py so that MIMEImage honors the max_line_length setting from the provided EmailPolicy when Base64-encoding image payloads.

  • Adds imports for base64 and textwrap.wrap
  • Replaces the old set_payload(_imagedata) + _encoder(self) calls with an explicit Base64 encode, wrap to policy.max_line_length (default 76), and then calls set_payload with the wrapped text.
  • Ensures CRLF line endings and proper headers are still applied by set_payload.

Fixes issue #133311: MIMEImage’s policy argument not taking effect.

This patch updates Lib/email/mime/image.py so that MIMEImage honors the max_line_length
setting from the provided EmailPolicy when Base64-encoding image payloads.

- Adds imports for base64 and textwrap.wrap
- Replaces the old `set_payload(_imagedata)` + `_encoder(self)` calls
  with an explicit Base64 encode, wrap to `policy.max_line_length` (default 76),
  and then calls `set_payload` with the wrapped text.
- Ensures CRLF line endings and proper headers are still applied by set_payload.

Fixes issue python#133311: MIMEImage’s policy argument not taking effect.
@vedant713 vedant713 requested a review from a team as a code owner May 2, 2025 23:17
@python-cla-bot
Copy link

python-cla-bot bot commented May 2, 2025

All commit authors signed the Contributor License Agreement.

CLA signed

@bedevere-app

This comment was marked as resolved.

@vedant713 vedant713 changed the title mime: have MIMEImage respect policy.max_line_length May 2, 2025
This patch updates Lib/email/mime/image.py so that MIMEImage honors the max_line_length
setting from the provided EmailPolicy when Base64-encoding image payloads.

- Adds imports for base64 and textwrap.wrap
- Replaces the old `self.set_payload(_imagedata)` + `_encoder(self)` calls
  with an explicit Base64 encode, wrap to `policy.max_line_length` (default 76),
  and then calls `self.set_payload` with the wrapped text.
- Ensures CRLF line endings and proper headers are still applied by set_payload.
@bedevere-app

This comment was marked as duplicate.

@bedevere-app

This comment was marked as duplicate.

self.set_payload(_imagedata)
_encoder(self)

#self.set_payload(_imagedata)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we remove these comments?

@@ -8,6 +8,8 @@

from email import encoders
from email.mime.nonmultipart import MIMENonMultipart
import base64
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's best to sort the imports, although there won't be any negative impact if we don't do so :)

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does this repo allow some sort of pre-commit? Like isort and blake hooks. Those things can help do this automatically.

Copy link
Contributor

@abhi-jha abhi-jha May 4, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Contributor

@sharktide sharktide left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The title of this PR should not be bpo: It should be gh as this is a github issue. https://bugs.python.org was long retired

@dkg
Copy link

dkg commented May 8, 2025

As noted over on #133311 this seems to affect MIMEText as well, which shares a baseclass (MIMENonMultipart) with MIMEImage. So maybe the better thing is to put this fix into the baseclass itself?

Copy link
Member

@ZeroIntensity ZeroIntensity left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This needs a test.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We only need one news entry, and the title is in the wrong format, so delete this one.

@@ -0,0 +1 @@
Fix email.mime.image.MIMEImage to respect policy.max_line_length when Base64-encoding image payloads.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Fix email.mime.image.MIMEImage to respect policy.max_line_length when Base64-encoding image payloads.
Fix :class:`email.mime.image.MIMEImage` not respecting :attr:`~email.policy.Policy.max_line_length` when Base64-encoding image payloads.
@@ -8,6 +8,8 @@

from email import encoders
from email.mime.nonmultipart import MIMENonMultipart
import base64
from textwrap import wrap
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

base64 and textwrap are expensive imports. It might be a good idea to move them to the method to reduce import time.

@ZeroIntensity ZeroIntensity changed the title bpo-133311: have MIMEImage respect policy.max_line_length May 11, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
X