通过Sendgrid发送电子邮件时无法获得单个换行符

Yas*_*ari 4 python email django

我正在django.core.mail用来发送电子邮件.我希望在电子邮件的某些位置实现单个换行符,如下所示:

Line 1
Line 2

Line 3
Line 4
Run Code Online (Sandbox Code Playgroud)

我试着这样做使用\nLine 1Line 3,和\n\nLine 2Line 4.

当我发送电子邮件时,会收到这样的信息:

Line 1 Line 2

Line 3 Line 4
Run Code Online (Sandbox Code Playgroud)

根据其他StackOverflow答案的建议,我尝试使用该django.template.loader.render_to_string方法从文件生成相应的字符串,但它生成一个字符串,\n其中包含我放置它们的确切位置,等等发送电子邮件会产生相同的不良结果.

当我将字符串打印到stdout时,它会根据需要显示.

总之,它们\n\n正在工作,但是在\n通过Django发送电子邮件时会转换为空格send_mail.怎么解决这个问题?请注意,这个问题是关于明文电子邮件,而不是HTML电子邮件.

编辑:来源,根据评论的要求:

from django.core.mail import send_mail
send_mail(
    'Test subject',
    'Line 1\nLine 2\n\nLine 3\nLine 4\n\n',
    'noreply@test.com',
    ['myemail@gmail.com'],
)
Run Code Online (Sandbox Code Playgroud)

通过SendGrid使用SMTP发送,如我的settings.py文件中所指定:

EMAIL_HOST = 'smtp.sendgrid.net'
EMAIL_HOST_USER = 'myusername'
EMAIL_HOST_PASSWORD = 'mypassword'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
Run Code Online (Sandbox Code Playgroud)

sol*_*oke 13

发生这种情况是因为您使用的是Sendgrid,在某些情况下会将纯文本消息转换为HTML.您很可能已将其配置为执行打开/单击跟踪,并且无法以纯文本格式执行此操作,因此会将您的邮件转换为HTML.

以上链接提供以下解决方案:

  1. 您可以关闭导致从纯文本转换为HTML的过滤器.

  2. 如果您使用空格开始每一行,这将在该行周围添加"预格式化"标记.

  3. 您可以使用双换行分隔新句子,这将在句子周围添加"段落"标记.

  4. 您可以将邮件转换为HTML,从而绕过我们完全转换它的需要

  5. 要全局禁用转换,请访问邮件设置 - >普通内容并启用抑制.