MCPcopy Create free account
hub / github.com/alibaba/async_simple / send_email

Method send_email

demo_example/smtp/smtp_client.cpp:167–219  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

165 void set_email_data(const email_data &data) { data_ = data; }
166
167 async_simple::coro::Lazy<void> send_email() {
168 std::string host = server_.server;
169 size_t pos = host.find("://");
170 if (pos != std::string::npos) {
171 host.erase(0, pos + 3);
172 }
173
174 asio::ip::tcp::resolver::query qry(
175 host, server_.port, asio::ip::resolver_query_base::numeric_service);
176 std::error_code ec;
177 auto endpoint_iterator = resolver_.resolve(qry, ec);
178
179 ec = co_await async_connect(io_context_, socket_, host, server_.port);
180 if (ec) {
181 std::cout << "Connect error: " << ec.message() << '\n';
182 throw asio::system_error(ec);
183 }
184
185 std::cout << "connect ok\n";
186 if constexpr (IS_SSL) {
187 upgrade_to_ssl();
188 }
189
190 build_request();
191
192 const char *header = asio::buffer_cast<const char *>(request_.data());
193 std::cout << header << '\n';
194 [[maybe_unused]] auto [write_ec, size] = co_await async_write(
195 get_socket(), asio::buffer(header, request_.size()));
196 if (write_ec) {
197 std::cout << "write failed, reason: " << ec.message() << '\n';
198 throw asio::system_error(write_ec);
199 }
200
201 while (true) {
202 const int max_length = 1024;
203 char read_buf[max_length];
204 [[maybe_unused]] auto [read_ec, size] = co_await async_read_some(
205 get_socket(), asio::buffer(read_buf, max_length));
206 if (read_ec) {
207 std::cout << "read failed, reason: " << ec.message() << '\n';
208 throw asio::system_error(read_ec);
209 }
210
211 std::string_view content(read_buf, size);
212 std::cout << content;
213
214 if (content.find("250 Mail OK") != std::string_view::npos) {
215 std::cout << "end smtp\n";
216 break;
217 }
218 }
219 }
220
221private:
222 auto &get_socket() {

Callers 1

mainFunction · 0.80

Calls 11

system_errorClass · 0.85
eraseMethod · 0.80
messageMethod · 0.80
async_connectFunction · 0.50
async_writeFunction · 0.50
bufferFunction · 0.50
async_read_someFunction · 0.50
findMethod · 0.45
resolveMethod · 0.45
dataMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected