当前位置: 动力学知识库 > 问答 > 编程问答 >

attachment - Attaching file in Rails 3 - mimepart Mailer

问题描述:

I'm sending an email using Rails like this:

attachments["ticket.pdf"] = WickedPdf.new.pdf_from_string(render_to_body(pdf: "ticket", template: 'template' }))

This works well in Gmail but in several other clients the attached pdf just doesn't appear.

Looking at the source code I realized it's a problem with mimeparts.

I'm having a hard time making an attachment file show in yahoo and several other email clients such as Thunderbird, if I analize the source code of the email sent I discover this:

The mimepart is the same for each part of the file...

the hierarchy (as far as i understand) must be like this:

multipart/mixed

multipart/alternative

multipart/related

text/html

image/png (e.g. for an inline attachment; pdf would be another good example)

text/plain

application/zip (e.g for an attachment--not inline)

This i extracted from https://github.com/jcoleman/mail_alternatives_with_attachments

Here, is the email source (just chunks of the content for better understanding):

Delivered-To: [email protected]

Received: by 10.194.54.135 with SMTP id j7csp144091wjp;

Fri, 28 Sep 2012 10:55:03 -0700 (PDT)

Received: by 10.224.187.146 with SMTP id cw18mr18768052qab.35.1348854902751;

Fri, 28 Sep 2012 10:55:02 -0700 (PDT)

Return-Path: <[email protected]>

Received: from mail-qa0-f46.company.com (mail-qa0-f46.company.com [209.85.216.46])

by mx.company.com with ESMTPS id c6si13006455qao.34.2012.09.28.10.55.02

(version=TLSv1/SSLv3 cipher=OTHER);

Fri, 28 Sep 2012 10:55:02 -0700 (PDT)

Received-SPF: pass (company.com: domain of [email protected] designates 209.85.216.46 as permitted sender) client-ip=xx.xxx.xxx.xxx;

Authentication-Results: mx.company.com; spf=pass (company.com: domain of [email protected] designates 209.85.216.46 as permitted sender) [email protected]; dkim=pass [email protected]

Received: by mail-qa0-f46.company.com with SMTP id c26so105866qad.5

for <[email protected]>; Fri, 28 Sep 2012 10:55:02 -0700 (PDT)

DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;

d=company.com; s=20120113;

h=date:from:reply-to:to:message-id:subject:mime-version:content-type

:content-transfer-encoding;

bh=nETVpMomUq0PkrNf9ScGjdaBPc5tYF0m1Rphx5FNS4c=;

b=I1ICSRRK10cdrqXxkNWmK5cLvXOqFpxXmzxNMlIVa8jh+4U1GwqwI1GZF7BRXh5FAU

wCyTzXfSkBrmn2cVGwUUiNEh956KT2ssWx37cQIb915lSp6rdIqflgQcF9yKwmtJoxDL

qO+nEVse7+Azi828zC7D6VV7ebAbmnr006KmppkH9bxILk+syiPKLvp4rZXAMIp0IFW8

nYZ2jY+n/ryduTSl0qDaBDCzVrky2eNwpqfJYizoYWIhxFuDmUWwaPpKzfWoxzT4b0+P

Mp/Ugv6iN1QyETJWbOfX4lpGezFzcaV7reZaBXLzcqUe1dc8elxFfWncsE0vozmFaj8m

z37Q==

Received: by 10.224.58.134 with SMTP id g6mr18690371qah.40.1348854902269;

Fri, 28 Sep 2012 10:55:02 -0700 (PDT)

Return-Path: <[email protected]>

Received: from localhost.localdomain (company.com. [xx.xxx.xxx.xx])

by mx.company.com with ESMTPS id ck11sm13357478qab.17.2012.09.28.10.54.56

(version=TLSv1/SSLv3 cipher=OTHER);

Fri, 28 Sep 2012 10:55:00 -0700 (PDT)

Return-Path: <[email protected]>

Date: Fri, 28 Sep 2012 15:09:56 -0300

From: somewhere <[email protected]>

Reply-To: [email protected]

To: [email protected]

Message-ID: <[email protected]>

Subject: algun subject

Mime-Version: 1.0

Content-Type: multipart/alternative;

boundary="--==_mimepart_5065e7f4af345_a9e43fdbdd45a760153b9";

charset=UTF-8

Content-Transfer-Encoding: 7bit

----==_mimepart_5065e7f4af345_a9e43fdbdd45a760153b9

Date: Fri, 28 Sep 2012 15:09:56 -0300

Mime-Version: 1.0

Content-Type: text/plain;

charset=UTF-8

Content-Transfer-Encoding: quoted-printable

Content-ID: <[email protected]>

********

texto cualquiera

********

----==_mimepart_5065e7f4af345_a9e43fdbdd45a760153b9

Date: Fri, 28 Sep 2012 15:09:56 -0300

Mime-Version: 1.0

Content-Type: text/html;

charset=UTF-8

Content-Transfer-Encoding: quoted-printable

Content-ID: <[email protected]>

<html xmlns=3D'http://www.w3.org/1999/xhtml'>

<html xml:lang=3D'en' xmlns=3D'http://www.w3.org/1999/xhtml'>

<head>

<meta content=3D'text/html; charset=3Dutf-8' http-equiv=3D'Content-=

Type'>

<title>somewhere</title>

<link href=3D'/assets/ev_classic_mailer.css' rel=3D'stylesheet' typ=

e=3D'text/css'>

<link href=3D'/assets/mailer_colors.css' rel=3D'stylesheet' type=3D=

'text/css'>

</head>

<body>

<table class=3D'mail-container-table'>

<tr>

<td class=3D'decoration' colspan=3D'3'></td>

</tr>

<tr>

<th background=3D'https://here.company.com/ass=

ets/mail/ev_classic_hd.png' class=3D'bcolor12 border header-01' colspan=3D=

'3'>

<h1>cogotudo</h1>

</th>

</tr>

</table>

</body>

</html>

</html>

----==_mimepart_5065e7f4af345_a9e43fdbdd45a760153b9

Date: Fri, 28 Sep 2012 15:09:56 -0300

Mime-Version: 1.0

Content-Type: text/html;

charset=UTF-8

Content-Transfer-Encoding: quoted-printable

Content-ID: <[email protected]>

<html xmlns=3D"http://www.w3.org/1999/xhtml" style=3D"outline: 0; font-we=

ight: inherit; font-style: inherit; font-size: 100%; font-family: inherit=

; vertical-align: baseline; margin: 0; padding: 0; border: 0;">

<html xml:lang=3D"en" xmlns=3D"http://www.w3.org/1999/xhtml" style=3D"o=

utline: 0; font-weight: inherit; font-style: inherit; font-size: 100%; fo=

nt-family: inherit; vertical-align: baseline; margin: 0; padding: 0; bord=

er: 0;">

<head>

<meta content=3D'text/html; charset=3Dutf-8' http-equiv=3D'Content-=

Type'>

<title>somewhere</title>

<link href=3D'/assets/ev_classic_mailer.css' rel=3D'stylesheet' typ=

e=3D'text/css'>

<link href=3D'/assets/mailer_colors.css' rel=3D'stylesheet' type=3D=

'text/css'>

</head>

<body style=3D"outline: 0; font-weight: inherit; font-style: inherit;=

</body>

</html>

</html>

----==_mimepart_5065e7f4af345_a9e43fdbdd45a760153b9

Date: Fri, 28 Sep 2012 15:09:56 -0300

Mime-Version: 1.0

Content-Type: application/pdf;

charset=UTF-8;

filename=ticket.pdf

Content-Transfer-Encoding: base64

Content-Disposition: attachment;

filename=ticket.pdf

Content-ID: <[email protected]>

JVBERi0xLjQKMSAwIG9iago8PAovVGl0bGUgKP7/KQovQ3JlYXRvciAo/v8p

Ci9Qcm9kdWNlciAo/v8AUQB0ACAANAAuADgALgAyACAAXCgAQwBcKQAgADIA

MAAxADEAIABOAG8AawBpAGEAIABDAG8AcgBwAG8AcgBhAHQAaQBvAG4AIABh

AG4AZAAvAG8AcgAgAGkAdABzACAAcwB1AGIAcwBpAGQAaQBhAHIAeQBcKAAt

AGkAZQBzAFwpKQovQ3JlYXRpb25EYXRlIChEOjIwMTIwOTI4MTgwOTU1KQo+

PgplbmRvYmoKMiAwIG9iago8PAovVHlwZSAvQ2F0YWxvZwovUGFnZXMgMyAw

IFIKPj4KZW5kb2JqCjQgMCBvYmoKPDwKL1R5cGUgL0V4dEdTdGF0ZQovU0Eg

dHJ1ZQovU00gMC4wMgovY2EgMS4wCi9DQSAxLjAKL0FJUyBmYWxzZQovU01h

c2sgL05vbmU+PgplbmRvYmoKNSAwIG9iagpbL1BhdHRlcm4gL0RldmljZVJH

----==_mimepart_5065e7f4af345_a9e43fdbdd45a760153b9--

网友答案:

All of your mimepart boundaries are the same...they're all the 'alternative' boundary.

--==_mimepart_5065e7f4af345_a9e43fdbdd45a760153b9

For an email with HTML, plain text AND attachments, you need to declare and properly encapsulate the separate parts by properly putting the boundaries in their right places. The easiest way to get a grasp of what that looks like is to manually create an email in an email client with all the 'features' you want (HTML + plain text + attachments) and then view the source and take note of how the mimepart boundaries are laid out.

Each "part" of the email source actually declares what the boundary looks like, and then at the end of each part there are one or more of those boundary lines indicating the end of the part. Parts can and should be encapsulated within other parts. It's damn complicated but the take-home note is that in your example, you only have one mimepart declared and used when you should have more (as you indicated in your hierarchy).

Now as for where/when this goes awry, we'd have to see the code you're using to generate the email from start to finish.

分享给朋友:
您可能感兴趣的文章:
随机阅读: