I've upgraded an existing email sending program from Indy 9 to Indy 10. This works fine in our test environment but on a clients site the attachments are appearing in the body of the email. Their SMTP server is adding a footer to the email and adding <html> ... </html> tags around the whole thing, which is causing this issue. The previous version on Indy 9 worked fine for this client.
Here is an example of the email we are sending:
Content-Type: multipart/mixed; boundary="gcJJK3Qk5C6XIV9FEwfRcK=_EH4Oq32hqE"
MIME-Version: 1.0
Date: Thu, 1 Oct 2020 00:02:29 +0100
Message-Id: <20201001000278.SM78660#B-P-S0308-APP1>
This is a multi-part message in MIME format
--gcJJK3Qk5C6XIV9FEwfRcK=_EH4Oq32hqE
Content-Type: text/plain
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline
Body text appears here.
--gcJJK3Qk5C6XIV9FEwfRcK=_EH4Oq32hqE
Content-Type: application/octet-stream;
name="PDA Audit.pdf"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="PDA Audit.pdf"
JVBERi0xLjINCjEgMCBvYmoNCjw8IC9UeXBlIC9DYXRhbG9nIA0KL1BhZ2VzIDMgMCBSIA0KL1Zp
ZXdlclByZWZlcmVuY2VzIDw8IA0KPj4NCj4+IA0KZW5kb2JqDQo1IDAgb2JqDQo8PCAvVHlwZSAv
<more lines here>
--gcJJK3Qk5C6XIV9FEwfRcK=_EH4Oq32hqE--
Is there anything wrong with this?
I note that the boundary no longer contains the =_NextPart, so I'm wondering if the code on the server has been badly written and is expecting to find this. Has anyone else had a similar issue?
Issue solved. We were allowing Indy to decide on the Content-Type which worked if we only sent an email with an attachment. If a previous email was just text the Content-Type was set to text/plain. When the email with the attachment was then sent Indy thought the Content-Type was already set so did not change it. Setting the Content-Type correctly solved the problem.
Related
I am setting up apache traffic server as forward proxy and want to push some objects in the cache from out side. I tried following instructions given here.
when I try to push an object following is the output I get
telnet 127.0.0.1 8080
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
PUSH http://www.company.com HTTP/1.0
Content-length: 84
HTTP/1.0 200 OK
Content-type: text/html
Content-length: 17
<HTML>
a
</HTML>
HTTP/1.0 400 Response Not Cachable
Date: Sun, 02 Aug 2015 16:55:41 GMT
Server: ATS/3.2.4
Cache-Control: no-store
Content-Type: text/html
Content-Language: en
Content-Length: 200
<HEAD><TITLE>Response Not Cachable</TITLE></HEAD>
<BODY BGCOLOR="white" FGCOLOR="black">
<FONT FACE="Helvetica,Arial"><B>
</B></FONT>
<!-- default "Response Not Cachable" response (400) -->
</BODY>
Connection closed by foreign host.
Yeah, you have to submit the PUSH request with a correct, cacheable response header. Depending on your ATS settings, that could either be something as simple as a Last-Modified header, or, more likely (ATS defaults) a properly specified Cache-Control: max-age= header.
Edit: Take a look at the traffic_primer script that comes with the ATS source, or from github at https://github.com/apache/trafficserver/blob/master/tools/traffic_primer . It doesn't do exactly what you are asking for, but what it does is to "replay" a request from an origin to other ATS boxes, using PUSH.
I'm developing an API proxy in Apigee EDGE to expose a Target API in SOAP (XML) to a REST/JSON endpoint with a fairly simple XMLtoJSON and a AssignMessage policy.
Until I just noticed that some characters in the final JSON were displayed as "?" while in the original SOAP (XML) response the same characters were correctly displayed as "รก" for example.
Then I noticed that the response from the Target API endpoint came in as:
Content-Type: text/xml; charset=iso-8859-1
While my intention is to output a properly encoded UTF-8 response as:
Content-Type: application/json; charset=utf-8
So my question is: Is there a way to convert the character encoding from iso-8859-1 to UTF-8 using just standard Policies? without incurring in going to Node, Java, Javascript or Python policies to do this simple character encoding?
You should be able to just set the appropriate encoding in a Content-Type header on the response using the AssignMessage policy... Does that work?
I am using codeigniter email class and helper. Everything worked perfectly well just yesterday and I dont think that I have done anything with it, but now I just dont receive any emails. The print_debugger() is echoing that a mail has been successfully sent, but there is no email in my gmail inbox, nor is any in the spam.
I have also configured a James email server and I cant receive any emails on that too. I really dont know what to do. I read somewhere that maybe I had stated $this->load->library('email') multiple times, so I have deleted all that statements and instead of that I created an autoload function for that. There are no errors within the framework whatsoever but the emails just cant be received.
$config['protocol'] = 'sendmail';
$config['charset'] = 'iso-8859-1';
$this->email->initialize($config);
$this->email->from('check#mail.com', 'Admin');
$this->email->to('mygmailaccount#gmail.com');
$this->email->subject('subject');
$this->email->message('email body');
$this->email->send();
echo $this->email->print_debugger();
The output is something like this:
Your message has been successfully sent using the following protocol: sendmail
User-Agent: CodeIgniter
Date: Sun, 14 Jul 2013 21:54:39 +0200
From: "Admin"
Return-Path:
To: mygmailaccount#gmail.com
Subject: =?iso-8859-1?Q?subject?=
Reply-To: "check#mail.com"
X-Sender: check#mail.com
X-Mailer: CodeIgniter
X-Priority: 3 (Normal)
Message-ID: <51e301ffa45d3#mail.com>
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
email body
You might want to start by looking in the mail server logs on the mail server that is being used to send the outgoing message from your codeignitor script. These should show you (a) whether or not the outgoing mail server is receiving the message for queuing from your codeignitor script, and if so - (b) what is happening when delivery of the message to the remote MTA is attempted.
I'm currently working on an application that will send the user a selected coupon via email or MMS. The problem that I am running into is with the display of the MMS when the customer receives it. on Android, the image is being displayed as a video, and on iOS, everything is wrong about the message.
Here's an example of the headers that are being sent:
User-Agent: none
Date: Tue, 5 Mar 2013 10:45:12 -0500
From:
Return-Path:
Subject: =?utf-8?Q?Your_Requested_Coupon?=
To: ###########txt.att.net
Reply-To: "webadministrator#domain.com"
X-Sender: webadministrator#domain.com
X-Mailer: none
X-Priority: 3 (Normal)
Message-ID: <51361308f1651#domain.com>
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="B_ATC_51361309002f2"
This is a multi-part message in MIME format.
Your email application may not support this format.
--B_ATC_51361309002f2
Content-Type: multipart/alternative; boundary="B_ALT_51361308f3595"
--B_ALT_51361308f3595
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
--B_ALT_51361308f3595
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: quoted-printable
--B_ALT_51361308f3595--
--B_ATC_51361309002f2
Content-type: image/jpeg; name="promo3.jpg"
Content-Disposition: attachment;
Content-Transfer-Encoding: base64
....
IMAGE ENCODING HERE
....
--B_ATC_51361309002f2--
And the CI Code:
$this->email->from('webadministrator#domain.com');
$this->email->to('XXXXXXXXXX#PHONE_MESSAGE_CENTER.COM');
$this->email->subject('Your Requested Coupon');
$this->email->message($this->load->view('sms_email', '', TRUE));
$this->email->attach('/path/to/image.jpg'); //I've also tried passing a second param 'inline' to change the Content-Disposition to inline
Does anyone know if it is possible to use the built in email class to accomplish this, or do I need to write specific headers to make picture messaging display properly?
Also is there a proper message format for MMS: text or html?, is there a proper way to attach an image for the iOS to view?
trying to send mms from the web using an email address, example #mms.att.com, will get you blocked by the network eventually. there is not a clean way to get around this problem without support of the network or mms partner. the best solution these days is to just send an sms with a link to a mobile ad on the web.
and by the way, i'd recommend a provider like cdyne or twilio for sms (dont try to send sms via email address either!) you might also try to simply connect a 3g/4g modem and modifying the driver to programmatically shoot sms/mms messages. go at your own risk on that one ..
I'm programming an email newsletter with a couple of embedded images. The headers look like:
... (snip)
MIME-Version: 1.0
Content-type: multipart/related;
boundary="xyzzy1220091"
This message is in MIME format. Since your mail reader does not understand
this format, some or all of this message may not be legible.
--xyzzy1220091
Content-type: text/html; charset=iso-8859-1; name="tempE924AAC7.html"
Content-description: html
Content-transfer-encoding: 7bit
Content-disposition: INLINE
(HTML newsletter here)
--xyzzy1220091
Content-type: image/jpeg; name="cabecera.jpg"
Content-description: cabecera
Content-transfer-encoding: base64
Content-disposition: inline; filename="cabecera.jpg";
Content-ID: <cabecera>
This works correctly in Gmail, Hotmail, Apple Mail... everything I tested it on, except Outlook 2010. In it, it will show an empty message and the HTML and JPG files as attachments in separate tabs; if you click on the HTML, it will show you a preview button with a warning about showing previews only from trusted sources.
If I send the newsletter not as a multipart/related attachment, but just as a HTML email:
Content-type: text/html
Content-transfer-encoding: quoted-printable
Then it displays perfectly in Outlook... but of course, then I can't add inline images.
As for the original problem, I solved it by using "multipart/alternative" and not attaching the HTML part as a file