# Execute Mail request with settings configured through attribute
fun execute: nullable CurlResponseFailed
do
if not self.curl.is_ok then return answer_failure(0, "Curl instance is not correctly initialized")
var lines = new Array[String]
# Headers
var headers = self.headers
if not headers.is_empty then
for k, v in headers do lines.add "{k}{v}"
end
# Recipients
var all_recipients = new Array[String]
var to = self.to
if to != null and to.length > 0 then
lines.add "To:{to.join(",")}"
all_recipients.append to
end
var cc = self.cc
if cc != null and cc.length > 0 then
lines.add "Cc:{cc.join(",")}"
all_recipients.append cc
end
var bcc = self.bcc
if bcc != null and bcc.length > 0 then all_recipients.append bcc
if all_recipients.is_empty then return answer_failure(0, "There must be at lease one recipient")
var err = self.curl.native.easy_setopt(new CURLOption.follow_location, 1)
if not err.is_ok then return answer_failure(err.to_i, err.to_s)
err = self.curl.native.easy_setopt(new CURLOption.mail_rcpt, all_recipients.to_curlslist)
if not err.is_ok then return answer_failure(err.to_i, err.to_s)
# From
var from = self.from
if not from == null then
lines.add "From:{from}"
err = self.curl.native.easy_setopt(new CURLOption.mail_from, from)
if not err.is_ok then return answer_failure(err.to_i, err.to_s)
end
# Subject
var subject = self.subject
if subject == null then subject = "" # Default
lines.add "Subject: {subject}"
# Headers body
var headers_body = self.headers_body
if not headers_body.is_empty then
for k, v in headers_body do lines.add "{k}{v}"
end
# Body
var body = self.body
if body == null then body = "" # Default
lines.add ""
lines.add body
lines.add ""
err = self.curl.native.register_callback_read(self)
if not err.is_ok then return answer_failure(err.to_i, err.to_s)
var content = lines.join("\n")
err = self.curl.native.register_read_datas_callback(self, content)
if not err.is_ok then return answer_failure(err.to_i, err.to_s)
var err_resp = perform
if err_resp != null then return err_resp
return null
end
lib/curl/curl.nit:447,2--524,4