53 CURLcode res = CURLE_OK;
55 curl = curl_easy_init();
57 struct curl_slist *headers = NULL;
58 struct curl_slist *recipients = NULL;
59 struct curl_slist *slist = NULL;
65 curl_easy_setopt(curl, CURLOPT_URL,
m_smtp_url.c_str());
68 curl_easy_setopt(curl, CURLOPT_USERNAME,
m_from.first.c_str());
69 curl_easy_setopt(curl, CURLOPT_PASSWORD,
m_password.c_str());
78 std::string from_email_addr =
80 curl_easy_setopt(curl, CURLOPT_MAIL_FROM, from_email_addr.c_str());
86 for (
auto &email_pair :
m_recvs) {
87 std::string email_addr =
'<' + email_pair.first +
'>';
88 recipients = curl_slist_append(recipients, email_addr.c_str());
91 for (
auto &email_pair :
m_ccs) {
92 std::string email_addr =
'<' + email_pair.first +
'>';
93 recipients = curl_slist_append(recipients, email_addr.c_str());
95 curl_easy_setopt(curl, CURLOPT_MAIL_RCPT, recipients);
101 header +=
m_from.second +
'<' +
m_from.first +
'>' +
"\n";
104 for (
unsigned int i = 0; i <
m_recvs.size(); i++) {
112 for (
unsigned int i = 0; i <
m_ccs.size(); i++) {
113 header +=
m_ccs[i].second +=
'<' +
m_ccs[i].first +
'>';
114 if (i !=
m_ccs.size() - 1)
119 header +=
"Subject:";
122 headers = curl_slist_append(headers, header.c_str());
123 curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
126 mime = curl_mime_init(curl);
130 alt = curl_mime_init(curl);
133 part = curl_mime_addpart(alt);
134 curl_mime_data(part,
m_email_body.c_str(), CURL_ZERO_TERMINATED);
135 curl_mime_type(part,
"text/html; charset=utf-8");
142 part = curl_mime_addpart(mime);
143 curl_mime_subparts(part, alt);
144 curl_mime_type(part,
"multipart/alternative");
145 slist = curl_slist_append(NULL,
"Content-Disposition: inline");
146 curl_mime_headers(part, slist, 1);
150 part = curl_mime_addpart(mime);
151 curl_mime_filedata(part, filename.c_str());
154 curl_easy_setopt(curl, CURLOPT_MIMEPOST, mime);
155 curl_easy_setopt(curl, CURLOPT_TIMEOUT, 10);
157 curl_easy_setopt(curl, CURLOPT_USE_SSL, (
long)CURLUSESSL_TRY);
158 curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
159 curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
163 curl, CURLOPT_VERBOSE,
164 Logger::isLevel(Logger::L_DEBUG));
165 res = curl_easy_perform(curl);
168 if (res != CURLE_OK) {
169 LOGD(
"curl_easy_perform() failed: " << curl_easy_strerror(res));
174 curl_slist_free_all(recipients);
175 curl_slist_free_all(headers);
185 curl_easy_cleanup(curl);
188 curl_mime_free(mime);
EmailSender(const std::string &smtp_server, const int smtp_port, const std::string &protocol, const std::string &from_email, const std::string &password, const std::string &from_name="")
Конструктор.