Re: E-mail attachment with unwanted characters

2018-04-29 Thread Vino.B via Digitalmars-d-learn

On Saturday, 28 April 2018 at 16:37:26 UTC, Vino.B wrote:

On Friday, 27 April 2018 at 18:20:46 UTC, Adam D. Ruppe wrote:

[...]


Hi Adam,

 Thank you very much, after removing the dot the unwanted 
characters disappeared, The earlier program (as function) is 
working as expected without any issue, but if I change the 
program from function to Classes, then the programing is 
executing without any errors, able to get the attachment wihout 
any unwanted characters, but not able to get the body text, 
tries passing the body text as Array!sting and normal string, 
even then the body message is not appearing when I receive the 
mails.


[...]


Hi Adam,

 Thank you very much, was able to resolve the issue.

From,
Vino.B


Re: E-mail attachment with unwanted characters

2018-04-28 Thread Vino.B via Digitalmars-d-learn

On Friday, 27 April 2018 at 18:20:46 UTC, Adam D. Ruppe wrote:

On Friday, 27 April 2018 at 17:57:26 UTC, Vino.B wrote:
headers.insert(to!string(Base64.encode(Content)) ~ 
".\r\n");

headers.insert("--" ~ boundary ~ ".");


what are those random dots for?


Hi Adam,

 Thank you very much, after removing the dot the unwanted 
characters disappeared, The earlier program (as function) is 
working as expected without any issue, but if I change the 
program from function to Classes, then the programing is 
executing without any errors, able to get the attachment wihout 
any unwanted characters, but not able to get the body text, tries 
passing the body text as Array!sting and normal string, even then 
the body message is not appearing when I receive the mails.


Code:
import std.array: join;
import std.base64: Base64;
import std.container.array;
import std.conv : to;
import std.file: read, getSize;
import std.format : format;
import std.net.curl;
import std.path : baseName;
import std.uuid: randomUUID;
pragma(lib, "curl");

class EmailMessage {

static string Boundary;
static this() { Boundary = randomUUID().toString(); }
string From, Subject, cid, Filename, msg, crlf = "\r\n";
Array!string To, Body, headers, attach;
int Size;

void Attachment (string Filename) { attach ~= Filename; }

string BuildMail () {
string[] tos;
foreach (e; To) { tos ~= e; }
headers.insert("From: " ~ From );
headers.insert("To: " ~ join(tos, ","));
headers.insert("Subject: " ~ Subject);
headers.insert("MIME-Version: 1.0");
headers.insert(format("Content-Type: multipart/alternative; 
boundary=\"%s\"\r\n", Boundary));

headers.insert("--" ~ Boundary);
headers.insert("Content-Type: text/plain; charset=utf-8");
headers ~ Body; //Array!string does not work
headers.insert(Body);   //string does not work
headers.insert("--" ~ Boundary);
headers.insert("Content-Type: text/plain");
headers ~ ((cid !is null) ? "Content-ID: <" ~ cid ~ ">" : "");
headers.insert("Content-Transfer-Encoding: base64");
foreach (File; attach) {
string Fname = baseName(File);
ubyte[] Content = cast(ubyte[])read(File);
Size = to!int(getSize(File) + Body.length);

headers.insert("Content-Disposition: attachment; 
filename=\"" ~ Fname ~ "\"");

headers.insert(crlf);
headers.insert(to!string(Base64.encode(Content)) ~ ".\r\n");
}

headers.insert("--" ~ Boundary);
msg.reserve(Size);
foreach(header; headers) { msg ~= header ~ "\r\n"; }
if(msg.length > 0) { msg ~= "\r\n";}
return(msg);
}

void Send(string server) {
const(char)[][] allRecipients;
foreach (e; To) { allRecipients ~= e; }
auto smtp = SMTP(server);
smtp.mailTo(allRecipients);
smtp.mailFrom = From;
smtp.message = BuildMail();
smtp.perform();
}
 }

void main () {
string Filename = "D:\\DScript\\Test.txt";
Array!string To, Body;
To.insert("us...@ask.com");
To.insert("us...@ask.com");
Body.insert("This is Test1");
Body.insert("This is Test2");
auto message = new EmailMessage();
message.To = To;
message.From = "ad...@ask.com";
message.Subject = "My Subject";
message.Body ~= Body;   //Array!string does not work
mesagae.Body = "Test Body"; //string does not work
message.Attachment = Filename;
message.Send = "smtp://ask.com";
}

From,
Vino.B


Re: E-mail attachment with unwanted characters

2018-04-27 Thread Adam D. Ruppe via Digitalmars-d-learn

On Friday, 27 April 2018 at 17:57:26 UTC, Vino.B wrote:

headers.insert(to!string(Base64.encode(Content)) ~ ".\r\n");
headers.insert("--" ~ boundary ~ ".");


what are those random dots for?


E-mail attachment with unwanted characters

2018-04-27 Thread Vino.B via Digitalmars-d-learn

Hi All,

  Request your help, the below code is working as expected, but 
when I receive the attachment, the attachment contains the 
orginal text plus some unwanted characters like below, can 
someone help me how to remove these unwanted characters.


Unwanted characters
This is a test documentoÞóÎ}ã¿xÛ]Zõ§ûwN¶÷ÆÝy·

Code:
import std.base64: Base64;
import std.container.array;
import std.conv : to;
import std.file: read;
import std.format : format;
import std.net.curl;
import std.path : baseName;
import std.uuid: randomUUID;
pragma(lib, "curl");

string Message(string To, string From, string Body, string 
Subject, string Filename, ubyte[] Content) {

Array!string headers;
string cid, msg, boundary = randomUUID().toString(), Fname = 
baseName(Filename);

const string crlf = "\r\n";
int Size = to!int(getSize(Filename));

headers.insert("From: " ~ From );
headers.insert("To: " ~ To );
headers.insert("Subject: " ~ "Subject" );
headers.insert("MIME-Version: 1.0");
headers.insert(format("Content-Type: multipart/mixed; 
boundary=\"%s\"\r\n", boundary));

headers.insert("--" ~ boundary);
headers.insert("Content-Type: text/html; charset=utf-8");
headers.insert(crlf);
headers.insert(Body);
headers.insert(crlf);
headers.insert("--" ~ boundary);
headers.insert("Content-Type: text/plain");
headers ~ ((cid !is null) ? "Content-ID: <" ~ cid ~ ">" : "");
headers.insert("Content-Transfer-Encoding: base64");
headers.insert("Content-Disposition: attachment; filename=\"" 
~ Fname ~ "\"");

headers.insert(crlf);
headers.insert(to!string(Base64.encode(Content)) ~ ".\r\n");
headers.insert(crlf);
headers.insert("--" ~ boundary ~ ".");

msg.reserve(Size + Body.length);
foreach(header; headers) { msg ~= header ~ "\r\n"; }
if(msg.length > 0) { msg ~= "\r\n";}
return(msg);

 }

 void main () {
 auto Filename = "C:\\Script\\New\\new.txt";
 auto Con = cast(ubyte[])read(Filename);
 auto smtp = SMTP("smtp://xxx.com");
 smtp.mailTo = "u...@ask.com";
 smtp.mailFrom = "ad...@ask.com";
 smtp.message =  Message("u...@ask.com", "ad...@ask.com", "Test", 
"TestMail", Filename, Con);

 smtp.perform();
}

From,
Vino.B