curl :sending mail via SMTP
phcute
peterhu.peterhu at outlook.com
Wed Dec 27 01:03:46 UTC 2023
Greetings!
I was trying to translate an example code snippets from curl
which demonstrates how to sending an email via smtp using curl
api.The orignal c code works fine,but my D code failed at the
beginnig when it is running.
Appreicate for the help to figure me out what's wrong with the
code.
dmd v2.106.0 , VS community 2019,Win10 64bit
'''
call dmd -m64 curl.lib sendmail.d && sendmail
* No URL set!
curl_easy_perform() failed:URL using bad/illegal format or
missing URL
'''
D source:
'''
import core.stdc.stdio;
import core.stdc.string;
import core.stdc.stdlib;
import etc.c.curl;
//import std.conv;
//import std.string;
pragma(lib,"curl.lib");
const PASSWORD="real_pass_word";
const FROM_ADDR="sender_email at add.ress";
const TO_ADDR="receiver_email at add.ress";
const CC_ADDR="cc_copy_email at add.ress";
const FROM_MAIL="sender_email at add.ress";
const TO_MAIL="receiver_email at add.ress";
const CC_MAIL="cc_copy_email at add.ress";
const SMTP_VALUE="smtp://smtp-mail.outlook.com:25";//M$
outlook.com mail SMTP...
//static const char* payload_text=cast(const char*)(
enum contents=(
"To: " ~ TO_MAIL ~ "\r\n" ~
"From: " ~ FROM_MAIL ~ "\r\n" ~
"Cc: " ~ CC_MAIL ~ "\r\n" ~
"\r\n" ~
"Subject: SMTP example message" ~ "\r\n" ~
"\r\n" ~
"The body of the message starts here." ~ "\r\n" ~
"\r\n" ~
"It could be a lot of lines, could be MIME encoded,
whatever.\r\n\r\nGood Luck!\r\nGood Luck!" ~ "\r\n");
static const char* payload_text= cast(const char*)contents.ptr;
struct upload_status
{
size_t bytes_read;
}
static size_t payload_source(char* ptr,size_t size,size_t
nmemb,void* userp)
{
upload_status* upload_ctx=cast(upload_status*)userp;
//char* data;
size_t room=size*nmemb;
if((size==0)||(nmemb==0)||((size*nmemb)<1))
{
return 0;
}
const char* data=&payload_text[upload_ctx.bytes_read];
//const char* data=null;
//memcpy(cast(void*)data,cast(void*)payload_text,upload_ctx.bytes_read);
if(data)
{
size_t len=strlen(data);
if(room<len)
{
len=room;
}
memcpy(ptr,data,len);
upload_ctx.bytes_read+=len;
return len;
}
return 0;
}
//extern(C) int main(int argc,char** argv) ---> betterC ? no
void main()
{
CURL* curl;
CURLcode res=CurlError.ok;
curl_slist* recipents=null;
upload_status upload_ctx={0};
curl=curl_easy_init();
if(curl)
{
curl_easy_setopt(curl,CurlProto.smtp,SMTP_VALUE.ptr);
curl_easy_setopt(curl,CurlOption.username,FROM_MAIL.ptr);
curl_easy_setopt(curl,CurlOption.mail_from,FROM_ADDR.ptr);
curl_easy_setopt(curl,CurlOption.password,PASSWORD.ptr);
recipents=curl_slist_append(recipents,TO_ADDR.ptr);
recipents=curl_slist_append(recipents,CC_ADDR.ptr);
curl_easy_setopt(curl,CurlOption.mail_rcpt,recipents);
curl_easy_setopt(curl,CurlOption.readfunction,&payload_source);
curl_easy_setopt(curl,CurlOption.readdata,&upload_ctx);
curl_easy_setopt(curl,CurlOption.verbose,1);
curl_easy_setopt(curl,CurlOption.upload,1);
curl_easy_setopt(curl,CurlOption.use_ssl,CurlUseSSL.all);
curl_easy_setopt(curl,CurlOption.ssl_verifypeer,0);
res=curl_easy_perform(curl);
if(res!=CurlError.ok)
{
fprintf(stderr,"curl_easy_perform()
failed:%s\n",curl_easy_strerror(res));
}
curl_slist_free_all(recipents);
curl_easy_cleanup(curl);
}
getchar();
//return 0;
}
'''
More information about the Digitalmars-d-learn
mailing list