mirror of
https://github.com/chatmail/core.git
synced 2026-05-09 01:46:30 +03:00
Use mailparse::msgidparse to parse Message-IDs
This commit is contained in:
committed by
holger krekel
parent
a18f4c9b1b
commit
33463856c5
@@ -1464,7 +1464,7 @@ fn is_known_rfc724_mid_in_list(context: &Context, mid_list: &str) -> bool {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Ok(ids) = mailparse::addrparse(mid_list) {
|
if let Ok(ids) = mailparse::msgidparse(mid_list) {
|
||||||
for id in ids.iter() {
|
for id in ids.iter() {
|
||||||
if is_known_rfc724_mid(context, id) {
|
if is_known_rfc724_mid(context, id) {
|
||||||
return true;
|
return true;
|
||||||
@@ -1476,8 +1476,7 @@ fn is_known_rfc724_mid_in_list(context: &Context, mid_list: &str) -> bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Check if a message is a reply to a known message (messenger or non-messenger).
|
/// Check if a message is a reply to a known message (messenger or non-messenger).
|
||||||
fn is_known_rfc724_mid(context: &Context, rfc724_mid: &mailparse::MailAddr) -> bool {
|
fn is_known_rfc724_mid(context: &Context, rfc724_mid: &str) -> bool {
|
||||||
let addr = extract_single_from_addr(rfc724_mid);
|
|
||||||
context
|
context
|
||||||
.sql
|
.sql
|
||||||
.exists(
|
.exists(
|
||||||
@@ -1485,7 +1484,7 @@ fn is_known_rfc724_mid(context: &Context, rfc724_mid: &mailparse::MailAddr) -> b
|
|||||||
LEFT JOIN chats c ON m.chat_id=c.id \
|
LEFT JOIN chats c ON m.chat_id=c.id \
|
||||||
WHERE m.rfc724_mid=? \
|
WHERE m.rfc724_mid=? \
|
||||||
AND m.chat_id>9 AND c.blocked=0;",
|
AND m.chat_id>9 AND c.blocked=0;",
|
||||||
params![addr],
|
params![rfc724_mid],
|
||||||
)
|
)
|
||||||
.unwrap_or_default()
|
.unwrap_or_default()
|
||||||
}
|
}
|
||||||
@@ -1512,7 +1511,7 @@ fn is_reply_to_messenger_message(context: &Context, mime_parser: &MimeMessage) -
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn is_msgrmsg_rfc724_mid_in_list(context: &Context, mid_list: &str) -> bool {
|
pub(crate) fn is_msgrmsg_rfc724_mid_in_list(context: &Context, mid_list: &str) -> bool {
|
||||||
if let Ok(ids) = mailparse::addrparse(mid_list) {
|
if let Ok(ids) = mailparse::msgidparse(mid_list) {
|
||||||
for id in ids.iter() {
|
for id in ids.iter() {
|
||||||
if is_msgrmsg_rfc724_mid(context, id) {
|
if is_msgrmsg_rfc724_mid(context, id) {
|
||||||
return true;
|
return true;
|
||||||
@@ -1522,21 +1521,13 @@ pub(crate) fn is_msgrmsg_rfc724_mid_in_list(context: &Context, mid_list: &str) -
|
|||||||
false
|
false
|
||||||
}
|
}
|
||||||
|
|
||||||
fn extract_single_from_addr(addr: &mailparse::MailAddr) -> &String {
|
|
||||||
match addr {
|
|
||||||
mailparse::MailAddr::Group(infos) => &infos.addrs[0].addr,
|
|
||||||
mailparse::MailAddr::Single(info) => &info.addr,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Check if a message is a reply to any messenger message.
|
/// Check if a message is a reply to any messenger message.
|
||||||
fn is_msgrmsg_rfc724_mid(context: &Context, rfc724_mid: &mailparse::MailAddr) -> bool {
|
fn is_msgrmsg_rfc724_mid(context: &Context, rfc724_mid: &str) -> bool {
|
||||||
let addr = extract_single_from_addr(rfc724_mid);
|
|
||||||
context
|
context
|
||||||
.sql
|
.sql
|
||||||
.exists(
|
.exists(
|
||||||
"SELECT id FROM msgs WHERE rfc724_mid=? AND msgrmsg!=0 AND chat_id>9;",
|
"SELECT id FROM msgs WHERE rfc724_mid=? AND msgrmsg!=0 AND chat_id>9;",
|
||||||
params![addr],
|
params![rfc724_mid],
|
||||||
)
|
)
|
||||||
.unwrap_or_default()
|
.unwrap_or_default()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1307,14 +1307,14 @@ fn precheck_imf(context: &Context, rfc724_mid: &str, server_folder: &str, server
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn parse_message_id(value: &str) -> crate::error::Result<String> {
|
fn parse_message_id(value: &str) -> crate::error::Result<String> {
|
||||||
let addrs = mailparse::addrparse(value)
|
let ids = mailparse::msgidparse(value)
|
||||||
.map_err(|err| format_err!("failed to parse message id {:?}", err))?;
|
.map_err(|err| format_err!("failed to parse message id {:?}", err))?;
|
||||||
|
|
||||||
if let Some(info) = addrs.extract_single_info() {
|
if ids.len() == 1 {
|
||||||
return Ok(info.addr);
|
Ok(ids[0].clone())
|
||||||
|
} else {
|
||||||
|
bail!("could not parse message_id: {}", value);
|
||||||
}
|
}
|
||||||
|
|
||||||
bail!("could not parse message_id: {}", value);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_fetch_headers(prefetch_msg: &Fetch) -> Result<Vec<mailparse::MailHeader>> {
|
fn get_fetch_headers(prefetch_msg: &Fetch) -> Result<Vec<mailparse::MailHeader>> {
|
||||||
|
|||||||
Reference in New Issue
Block a user