1010from email .mime .base import MIMEBase
1111from email import encoders
1212from email .header import Header
13-
13+ from email . utils import parseaddr , formataddr
1414
1515def send_email (
1616 smtp_server ,
@@ -21,6 +21,7 @@ def send_email(
2121 subject ,
2222 body ,
2323 body_type = 'plain' ,
24+ sender_name = None ,
2425 attachment_paths = None ,
2526 get_socket_func = None
2627):
@@ -38,6 +39,9 @@ def send_email(
3839 - body_type: Type of the body content ('plain' or 'html', default is 'plain').
3940 - attachment_paths: List of file paths for the attachments (optional).
4041 """
42+ def _format_addr (s ):
43+ name , addr = parseaddr (s )
44+ return formataddr ((Header (name , 'utf-8' ).encode (), addr ))
4145
4246 if get_socket_func is not None :
4347 ori_get_socket_func = smtplib .SMTP ._get_socket
@@ -55,9 +59,12 @@ def send_email(
5559 server = smtplib .SMTP_SSL (smtp_server , port )
5660
5761 message = MIMEMultipart ()
58- message ['From' ] = Header (sender_email , 'utf-8' )
59- message ['To' ] = Header (receiver_email , 'utf-8' )
60- message ['Subject' ] = Header (subject , 'utf-8' )
62+
63+ if sender_name is None :
64+ sender_name = sender_email .split ('@' )[0 ]
65+ message ['From' ] = _format_addr (f'{ sender_name } <{ sender_email } >' )
66+ message ['To' ] = _format_addr (f'{ receiver_email .split ("@" )[0 ]} <{ receiver_email } >' )
67+ message ['Subject' ] = Header (subject , 'utf-8' ).encode ()
6168 message .attach (MIMEText (body , body_type , 'utf-8' ))
6269 if attachment_paths is None :
6370 attachment_paths = []
0 commit comments