Send email: Difference between revisions
Content added Content deleted
Thundergnat (talk | contribs) (→{{header|Perl 6}}: Add code to actually (theoretically) send the email) |
|||
Line 1,300: | Line 1,300: | ||
} |
} |
||
)</lang> |
)</lang> |
||
=={{header|Phix}}== |
|||
{{trans|C}} |
|||
Obviously, USER/PWD/URL/etc. would all need altering for your details. |
|||
For gmail, make sure you enable https://myaccount.google.com/lesssecureapps |
|||
<lang Phix>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()</lang> |
|||
=={{header|PHP}}== |
=={{header|PHP}}== |