Overview
Comment: | add more logging, actually send attachments as replies to the email |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
31aec3c4b028423c26f21dd518902f37 |
User & Date: | arcade on 2024-05-23 14:00:03.852 |
Other Links: | manifest | tags |
Context
2024-05-24
| ||
05:23 | rewamp error handling, also old mail is not deleted now when something fails check-in: e81897ec87 user: arcade tags: trunk | |
2024-05-23
| ||
14:00 | add more logging, actually send attachments as replies to the email check-in: 31aec3c4b0 user: arcade tags: trunk | |
11:17 | expand README check-in: 338af36a00 user: arcade tags: trunk | |
Changes
Modified Cargo.lock
from [c527e74a4a]
to [77cb21e10a].
︙ | ︙ | |||
12 13 14 15 16 17 18 19 20 21 22 23 24 25 | ] [[package]] name = "adler" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" [[package]] name = "anyhow" version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | ] [[package]] name = "adler" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" [[package]] name = "aho-corasick" version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" dependencies = [ "memchr", ] [[package]] name = "anstream" version = "0.6.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "418c75fa768af9c03be99d17643f93f79bbba589895012a80e3452a19ddda15b" dependencies = [ "anstyle", "anstyle-parse", "anstyle-query", "anstyle-wincon", "colorchoice", "is_terminal_polyfill", "utf8parse", ] [[package]] name = "anstyle" version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "038dfcf04a5feb68e9c60b21c9625a54c2c0616e79b72b0fd87075a056ae1d1b" [[package]] name = "anstyle-parse" version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c03a11a9034d92058ceb6ee011ce58af4a9bf61491aa7e1e59ecd24bd40d22d4" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a64c907d4e79225ac72e2a354c9ce84d50ebb4586dee56c82b3ee73004f537f5" dependencies = [ "windows-sys 0.52.0", ] [[package]] name = "anstyle-wincon" version = "3.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "61a38449feb7068f52bb06c12759005cf459ee52bb4adc1d5a7c4322d716fb19" dependencies = [ "anstyle", "windows-sys 0.52.0", ] [[package]] name = "anyhow" version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" |
︙ | ︙ | |||
364 365 366 367 368 369 370 371 372 373 374 375 376 377 | [[package]] name = "cfg-if" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "concurrent-queue" version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" dependencies = [ "crossbeam-utils", | > > > > > > | 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 | [[package]] name = "cfg-if" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "colorchoice" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b6a852b24ab71dffc585bcb46eaf7959d175cb865a7152e35b348d1b2960422" [[package]] name = "concurrent-queue" version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" dependencies = [ "crossbeam-utils", |
︙ | ︙ | |||
434 435 436 437 438 439 440 441 442 443 444 445 446 447 | checksum = "570d109b813e904becc80d8d5da38376818a143348413f7149f1340fe04754d4" dependencies = [ "heck", "proc-macro2", "quote", "syn 1.0.109", ] [[package]] name = "equivalent" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" | > > > > > > > > > > > > > > > > > > > > > > > | 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 | checksum = "570d109b813e904becc80d8d5da38376818a143348413f7149f1340fe04754d4" dependencies = [ "heck", "proc-macro2", "quote", "syn 1.0.109", ] [[package]] name = "env_filter" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a009aa4810eb158359dda09d0c87378e4bbb89b5a801f016885a4707ba24f7ea" dependencies = [ "log", "regex", ] [[package]] name = "env_logger" version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "38b35839ba51819680ba087cd351788c9a3c476841207e0b8cee0b04722343b9" dependencies = [ "anstream", "anstyle", "env_filter", "humantime", "log", ] [[package]] name = "equivalent" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" |
︙ | ︙ | |||
796 797 798 799 800 801 802 803 804 805 806 807 808 809 | [[package]] name = "httpdate" version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "hyper" version = "0.14.28" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80" dependencies = [ "bytes", | > > > > > > | 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 | [[package]] name = "httpdate" version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "humantime" version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "hyper" version = "0.14.28" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80" dependencies = [ "bytes", |
︙ | ︙ | |||
901 902 903 904 905 906 907 908 909 910 911 912 913 914 | [[package]] name = "ipnet" version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" [[package]] name = "itoa" version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" [[package]] | > > > > > > | 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 | [[package]] name = "ipnet" version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" [[package]] name = "is_terminal_polyfill" version = "1.70.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8478577c03552c21db0e2724ffb8986a5ce7af88107e6be5d2ee6e158c12800" [[package]] name = "itoa" version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" [[package]] |
︙ | ︙ | |||
1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 | [[package]] name = "regex" version = "1.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c117dbdfde9c8308975b6a18d71f3f385c89461f7b3fb054288ecf2a2058ba4c" dependencies = [ "regex-automata", "regex-syntax", ] [[package]] name = "regex-automata" version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea" dependencies = [ "regex-syntax", ] [[package]] name = "regex-syntax" version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" | > > > > | 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 | [[package]] name = "regex" version = "1.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c117dbdfde9c8308975b6a18d71f3f385c89461f7b3fb054288ecf2a2058ba4c" dependencies = [ "aho-corasick", "memchr", "regex-automata", "regex-syntax", ] [[package]] name = "regex-automata" version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea" dependencies = [ "aho-corasick", "memchr", "regex-syntax", ] [[package]] name = "regex-syntax" version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" |
︙ | ︙ | |||
1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 | [[package]] name = "smtp2tg" version = "0.1.0" dependencies = [ "anyhow", "async-std", "config", "mail-parser", "samotop", "telegram-bot", ] [[package]] name = "socket2" | > | 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 | [[package]] name = "smtp2tg" version = "0.1.0" dependencies = [ "anyhow", "async-std", "config", "env_logger", "mail-parser", "samotop", "telegram-bot", ] [[package]] name = "socket2" |
︙ | ︙ | |||
2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 | checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" dependencies = [ "form_urlencoded", "idna 0.5.0", "percent-encoding", ] [[package]] name = "uuid" version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" dependencies = [ "getrandom 0.2.15", | > > > > > > | 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 | checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" dependencies = [ "form_urlencoded", "idna 0.5.0", "percent-encoding", ] [[package]] name = "utf8parse" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" [[package]] name = "uuid" version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" dependencies = [ "getrandom 0.2.15", |
︙ | ︙ |
Modified Cargo.toml
from [9b78cfa898]
to [e845cee06c].
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | [package] name = "smtp2tg" version = "0.1.0" authors = [ "arcade" ] edition = "2021" [dependencies] anyhow = "*" async-std = { version = "*", features = [ "tokio1" ] } config = { version = "*", default-features = false, features = [ "toml" ] } telegram-bot = { git = "https://github.com/telegram-rs/telegram-bot" } mail-parser = { version = "*", features = ["serde", "serde_support"] } samotop = "*" [profile.release] lto = true codegen-units = 1 | > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | [package] name = "smtp2tg" version = "0.1.0" authors = [ "arcade" ] edition = "2021" [dependencies] anyhow = "*" async-std = { version = "*", features = [ "tokio1" ] } config = { version = "*", default-features = false, features = [ "toml" ] } env_logger = "*" telegram-bot = { git = "https://github.com/telegram-rs/telegram-bot" } mail-parser = { version = "*", features = ["serde", "serde_support"] } samotop = "*" [profile.release] lto = true codegen-units = 1 |
Modified src/main.rs
from [c4a8eb25d5]
to [b5c79e7814].
︙ | ︙ | |||
10 11 12 13 14 15 16 17 18 19 20 21 22 23 | smtp::{ SmtpParser, Prudence, }, }; use telegram_bot::{ Api, ParseMode, SendMessage, UserId, }; use std::{ borrow::Cow, | > | 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | smtp::{ SmtpParser, Prudence, }, }; use telegram_bot::{ Api, MessageOrChannelPost, ParseMode, SendMessage, UserId, }; use std::{ borrow::Cow, |
︙ | ︙ | |||
139 140 141 142 143 144 145 | }; reply.push("```".into()); for line in body.lines() { reply.push(line.into()); } reply.push("```".into()); | | | | | 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 | }; reply.push("```".into()); for line in body.lines() { reply.push(line.into()); } reply.push("```".into()); // and let's collect all other attachment parts let mut files_to_send = vec![]; /* * let's just skip html parts for now, they just duplicate text? while html_num < html_parts { files_to_send.push(mail.html_part(html_num).unwrap()); html_num += 1; } */ while text_num < text_parts { files_to_send.push(mail.text_part(text_num).unwrap()); text_num += 1; } while file_num < attachments { files_to_send.push(mail.attachment(file_num).unwrap()); file_num += 1; } for chat in rcpt { let base_post = core.send(chat, reply.join("\n")).await.unwrap(); for chunk in &files_to_send { let data = chunk.contents().to_vec(); let obj = telegram_bot::types::InputFileUpload::with_data(data, "Attachment"); core.sendfile(chat, obj, Some(&base_post)).await.unwrap(); } } }, None => { core.debug("None mail.").await.unwrap(); }, }; }); |
︙ | ︙ | |||
204 205 206 207 208 209 210 | TelegramTransport { tg, recipients, } } | | | | < | | | < | > > > > > | > > > > | 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 | TelegramTransport { tg, recipients, } } pub async fn debug<'b, S>(&self, msg: S) -> Result<MessageOrChannelPost> where S: Into<Cow<'b, str>> { task::sleep(Duration::from_secs(5)).await; Ok(self.tg.send(SendMessage::new(self.recipients.get("_").unwrap(), msg) .parse_mode(ParseMode::Markdown)).await?) } pub async fn send<'b, S>(&self, to: &UserId, msg: S) -> Result<MessageOrChannelPost> where S: Into<Cow<'b, str>> { task::sleep(Duration::from_secs(5)).await; Ok(self.tg.send(SendMessage::new(to, msg) .parse_mode(ParseMode::Markdown)).await?) } pub async fn sendfile<V>(&self, to: &UserId, chunk: V, basic_mail: Option<&MessageOrChannelPost>) -> Result<()> where V: Into<telegram_bot::InputFile> { task::sleep(Duration::from_secs(5)).await; match basic_mail { Some(post) => { self.tg.send(telegram_bot::SendDocument::new(to, chunk).reply_to(post)).await?; }, None => { self.tg.send(telegram_bot::SendDocument::new(to, chunk)).await?; }, }; Ok(()) } } #[async_std::main] async fn main() { let settings: config::Config = config::Config::builder() .add_source(config::File::with_name("smtp2tg.toml")) .build() .expect("[smtp2tg.toml] there was an error reading config\n\ \tplease consult \"smtp2tg.toml.example\" for details"); let maildir: PathBuf = settings.get_string("maildir") .expect("[smtp2tg.toml] missing \"maildir\" parameter.\n").into(); let listen_on = settings.get_string("listen_on") .expect("[smtp2tg.toml] missing \"listen_on\" parameter.\n"); let core = TelegramTransport::new(settings); let sink = Builder + Name::new("smtp2tg") + DebugService + my_prudence() + MailDir::new(maildir.clone()).unwrap(); env_logger::init(); task::spawn(async move { loop { relay_mails(&maildir, &core).unwrap(); task::sleep(Duration::from_secs(5)).await; } }); |
︙ | ︙ |