63 lines
2.6 KiB
Plaintext
63 lines
2.6 KiB
Plaintext
include builtins\libcurl.e
|
|
|
|
constant USER = "you@gmail.com",
|
|
PWD = "secret",
|
|
URL = "smtps://smtp.gmail.com:465",
|
|
FROM = "sender@gmail.com",
|
|
TO = "addressee@email.com",
|
|
CC = "info@example.org",
|
|
FMT = "Date: Mon, 13 Jun 2018 11:30:00 +0100\r\n"&
|
|
"To: %s\r\n"&
|
|
"From: %s (Example User)\r\n"&
|
|
"Cc: %s (Another example User)\r\n"&
|
|
"Subject: Sanding mail via Phix\r\n"&
|
|
"\r\n"&
|
|
"This mail is being sent by a Phix program.\r\n"&
|
|
"\r\n"&
|
|
"It connects to the GMail SMTP server, by far the most popular mail program of all.\r\n"&
|
|
"Which is, however, probably not written in Phix.\r\n"
|
|
|
|
function read_callback(atom pbuffer, integer size, nmemb, atom pUserData)
|
|
-- copy a maximum of size*nmemb bytes into pbuffer
|
|
if size==0 or nmemb==0 or size*nmemb<1 then return 0 end if
|
|
{integer sent, integer len, atom pPayload} = peekns({pUserData,3})
|
|
integer bytes_written = min(size*nmemb,len-sent)
|
|
mem_copy(pbuffer,pPayload+sent,bytes_written)
|
|
sent += bytes_written
|
|
pokeN(pUserData,sent,machine_word())
|
|
-- printf(2, "*** We read %d bytes from file\n", bytes_written)
|
|
return bytes_written
|
|
end function
|
|
constant read_cb = call_back({'+',routine_id("read_callback")})
|
|
|
|
constant string payload_text = sprintf(FMT,{TO,FROM,CC})
|
|
|
|
curl_global_init()
|
|
CURLcode res = CURLE_OK
|
|
atom slist_recipients = NULL
|
|
atom curl = curl_easy_init()
|
|
curl_easy_setopt(curl, CURLOPT_USERNAME, USER)
|
|
curl_easy_setopt(curl, CURLOPT_PASSWORD, PWD)
|
|
curl_easy_setopt(curl, CURLOPT_URL, URL)
|
|
curl_easy_setopt(curl, CURLOPT_USE_SSL, CURLUSESSL_ALL)
|
|
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0)
|
|
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0)
|
|
curl_easy_setopt(curl, CURLOPT_MAIL_FROM, FROM)
|
|
slist_recipients = curl_slist_append(slist_recipients, TO)
|
|
slist_recipients = curl_slist_append(slist_recipients, CC)
|
|
curl_easy_setopt(curl, CURLOPT_MAIL_RCPT, slist_recipients)
|
|
curl_easy_setopt(curl, CURLOPT_READFUNCTION, read_cb);
|
|
atom pUserData = allocate(machine_word()*3),
|
|
pPayload = allocate_string(payload_text)
|
|
pokeN(pUserData,{0,length(payload_text),pPayload},machine_word())
|
|
curl_easy_setopt(curl, CURLOPT_READDATA, pUserData)
|
|
curl_easy_setopt(curl, CURLOPT_UPLOAD, true)
|
|
--curl_easy_setopt(curl, CURLOPT_VERBOSE, true)
|
|
res = curl_easy_perform(curl)
|
|
if res!=CURLE_OK then
|
|
printf(2, "curl_easy_perform() failed: %d (%s)\n",{res,curl_easy_strerror(res)})
|
|
end if
|
|
curl_slist_free_all(slist_recipients)
|
|
curl_easy_cleanup(curl)
|
|
curl_global_cleanup()
|