Feature: read receipts (MDN, RFC 8098)

Bulwark had no read-receipt support (JMAP/Stalwart have no native MDN).
End-to-end, client-side, in three parts:

- Request (compose): a toolbar toggle (MailCheck, green when on) sets
  Disposition-Notification-To on the outgoing message via the JMAP
  "header:<name>:asText" create property. Threaded composer -> page ->
  email-store -> client.sendEmail. Default from requestReadReceiptDefault.

- Detect (viewer): reads Disposition-Notification-To case-insensitively from
  the parsed headers and shows a banner (green Send / red Ignore) in the
  unified notification bar. Hidden in Sent/Drafts/Trash/Junk and once handled.
  message/disposition-notification + message/delivery-status report parts are
  filtered out of the attachment list.

- Respond (MDN): lib/mdn.ts builds an RFC 8098 multipart/report (text/plain +
  message/disposition-notification, UTF-8/base64, localized subject + body).
  client.sendReadReceipt uploads the blob, imports it into Sent via
  Email/import, then submits with an explicit envelope. Both Send and Ignore
  set the $MDNSent keyword (RFC 3503) so no client re-prompts. Behaviour
  configurable: ask / always / never.

New: lib/mdn.ts, read-receipt-banner.tsx. Settings (requestReadReceiptDefault,
readReceiptResponse) + UI. All 17 locales.
This commit is contained in:
dealerweb
2026-05-30 15:58:39 +02:00
committed by Linus Rath
parent 2ba0003e16
commit bebb394f54
28 changed files with 901 additions and 9 deletions
+22
View File
@@ -260,6 +260,15 @@
"reschedule_prompt": "Zadejte nové datum/čas, např. 2026-05-04T15:30"
},
"email_viewer": {
"read_receipt": {
"prompt": "Odesílatel žádá o potvrzení o přečtení:",
"send": "Odeslat potvrzení",
"ignore": "Ignorovat",
"sent": "Potvrzení o přečtení odesláno.",
"send_failed": "Potvrzení o přečtení se nepodařilo odeslat",
"mdn_subject": "Přečteno: {subject}",
"mdn_body": "Toto je potvrzení o přečtení zprávy, kterou jste odeslali na adresu {recipient}.\n\nPoznámka: Toto potvrzení pouze potvrzuje, že zpráva byla zobrazena na počítači příjemce. Nezaručuje, že příjemce obsah přečetl nebo mu porozuměl."
},
"no_email_selected": "Není vybrána žádná zpráva",
"no_email_description": "Vyberte zprávu ze seznamu pro její zobrazení",
"no_conversation_selected": "Není vybrána žádná konverzace",
@@ -545,6 +554,8 @@
"undo_send": "Vrátit odeslání"
},
"email_composer": {
"read_receipt_on": "Vyžádáno potvrzení o přečtení (kliknutím vypnete)",
"read_receipt_off": "Vyžádat potvrzení o přečtení",
"new_message": "Nová zpráva",
"reply": "Odpovědět",
"reply_all": "Odpovědět všem",
@@ -1006,6 +1017,17 @@
}
},
"email_behavior": {
"request_read_receipt": {
"label": "Standardně vyžadovat potvrzení o přečtení",
"description": "Při psaní nové zprávy předem zapnout žádost o potvrzení o přečtení."
},
"read_receipt_response": {
"label": "Reagovat na žádosti o potvrzení o přečtení",
"description": "Co dělat, když příchozí zpráva žádá o potvrzení o přečtení.",
"ask": "Vždy se zeptat",
"always": "Vždy odeslat",
"never": "Nikdy neodesílat"
},
"title": "Chování e-mailu",
"description": "Nakonfigurujte způsob zpracování e-mailů",
"mark_read": {
+22
View File
@@ -260,6 +260,15 @@
"reschedule_prompt": "Indtast en ny dato/tid, f.eks. 2026-05-04T15:30"
},
"email_viewer": {
"read_receipt": {
"prompt": "Afsenderen anmoder om en læsekvittering:",
"send": "Send kvittering",
"ignore": "Ignorér",
"sent": "Læsekvittering sendt.",
"send_failed": "Læsekvittering kunne ikke sendes",
"mdn_subject": "Læst: {subject}",
"mdn_body": "Dette er en læsekvittering for den besked, du sendte til {recipient}.\n\nBemærk: Denne kvittering bekræfter kun, at beskeden blev vist på modtagerens computer. Der er ingen garanti for, at modtageren har læst eller forstået indholdet."
},
"no_email_selected": "Ingen e-mail valgt",
"no_email_description": "Vælg en e-mail fra listen for at se den her",
"no_conversation_selected": "Ingen samtale valgt",
@@ -545,6 +554,8 @@
"undo_send": "Fortryd afsendelse"
},
"email_composer": {
"read_receipt_on": "Læsekvittering anmodet (klik for at deaktivere)",
"read_receipt_off": "Anmod om læsekvittering",
"new_message": "Ny besked",
"reply": "Svar",
"reply_all": "Svar alle",
@@ -1007,6 +1018,17 @@
}
},
"email_behavior": {
"request_read_receipt": {
"label": "Anmod om læsekvittering som standard",
"description": "Aktivér anmodningen om læsekvittering på forhånd, når du skriver en ny besked."
},
"read_receipt_response": {
"label": "Svar på anmodninger om læsekvittering",
"description": "Hvad der skal ske, når en indgående besked beder om en læsekvittering.",
"ask": "Spørg hver gang",
"always": "Send altid",
"never": "Send aldrig"
},
"title": "E-mail-adfærd",
"description": "Konfigurér hvordan e-mails håndteres",
"mark_read": {
+22
View File
@@ -260,6 +260,15 @@
"reschedule_prompt": "Neues Datum/Uhrzeit eingeben, z. B. 2026-05-04T15:30"
},
"email_viewer": {
"read_receipt": {
"prompt": "Der Absender bittet um eine Lesebestätigung:",
"send": "Bestätigung senden",
"ignore": "Ignorieren",
"sent": "Lesebestätigung gesendet.",
"send_failed": "Lesebestätigung konnte nicht gesendet werden",
"mdn_subject": "Gelesen: {subject}",
"mdn_body": "Dies ist eine Lesebestätigung für die Nachricht, die Sie an {recipient} gesendet haben.\n\nHinweis: Diese Bestätigung bestätigt lediglich, dass die Nachricht auf dem Computer des Empfängers angezeigt wurde. Es gibt keine Garantie, dass der Empfänger den Inhalt gelesen oder verstanden hat."
},
"no_email_selected": "Keine E-Mail ausgewählt",
"no_email_description": "Wählen Sie eine E-Mail aus der Liste aus, um sie hier anzuzeigen",
"no_conversation_selected": "Keine Unterhaltung ausgewählt",
@@ -545,6 +554,8 @@
"undo_send": "Senden rückgängig"
},
"email_composer": {
"read_receipt_on": "Lesebestätigung angefordert (klicken zum Deaktivieren)",
"read_receipt_off": "Lesebestätigung anfordern",
"new_message": "Neue Nachricht",
"reply": "Antworten",
"reply_all": "Allen antworten",
@@ -1006,6 +1017,17 @@
}
},
"email_behavior": {
"request_read_receipt": {
"label": "Lesebestätigung standardmäßig anfordern",
"description": "Beim Verfassen einer neuen Nachricht die Anforderung einer Lesebestätigung vorab aktivieren."
},
"read_receipt_response": {
"label": "Auf Lesebestätigungs-Anfragen reagieren",
"description": "Verhalten, wenn eine eingehende Nachricht um eine Lesebestätigung bittet.",
"ask": "Jedes Mal fragen",
"always": "Immer senden",
"never": "Nie senden"
},
"title": "E-Mail-Verhalten",
"description": "Konfigurieren Sie, wie E-Mails verarbeitet werden",
"mark_read": {
+22
View File
@@ -260,6 +260,15 @@
"reschedule_prompt": "Enter a new date/time, e.g. 2026-05-04T15:30"
},
"email_viewer": {
"read_receipt": {
"prompt": "The sender requested a read receipt:",
"send": "Send receipt",
"ignore": "Ignore",
"sent": "Read receipt sent.",
"send_failed": "Read receipt could not be sent",
"mdn_subject": "Read: {subject}",
"mdn_body": "This is a return receipt for the message you sent to {recipient}.\n\nNote: This receipt only acknowledges that the message was displayed on the recipient''s computer. There is no guarantee that the recipient has read or understood the message contents."
},
"no_email_selected": "No email selected",
"no_email_description": "Select an email from the list to view it here",
"no_conversation_selected": "No conversation selected",
@@ -545,6 +554,8 @@
"undo_send": "Undo send"
},
"email_composer": {
"read_receipt_on": "Read receipt requested (click to disable)",
"read_receipt_off": "Request a read receipt",
"new_message": "New Message",
"reply": "Reply",
"reply_all": "Reply All",
@@ -1007,6 +1018,17 @@
}
},
"email_behavior": {
"request_read_receipt": {
"label": "Request read receipts by default",
"description": "Pre-enable the read-receipt request when composing a new message."
},
"read_receipt_response": {
"label": "Respond to read-receipt requests",
"description": "What to do when an incoming message asks for a read receipt.",
"ask": "Ask each time",
"always": "Always send",
"never": "Never send"
},
"title": "Email Behavior",
"description": "Configure how emails are handled",
"mark_read": {
+22
View File
@@ -260,6 +260,15 @@
"reschedule_prompt": "Introduce una nueva fecha/hora, p. ej. 2026-05-04T15:30"
},
"email_viewer": {
"read_receipt": {
"prompt": "El remitente solicita una confirmación de lectura:",
"send": "Enviar confirmación",
"ignore": "Ignorar",
"sent": "Confirmación de lectura enviada.",
"send_failed": "No se pudo enviar la confirmación de lectura",
"mdn_subject": "Leído: {subject}",
"mdn_body": "Este es un acuse de recibo del mensaje que enviaste a {recipient}.\n\nNota: Este acuse solo confirma que el mensaje se mostró en el ordenador del destinatario. No garantiza que el destinatario haya leído o entendido el contenido."
},
"no_email_selected": "Ningún correo seleccionado",
"no_email_description": "Seleccione un correo de la lista para verlo aquí",
"no_conversation_selected": "Ninguna conversación seleccionada",
@@ -545,6 +554,8 @@
"undo_send": "Deshacer envío"
},
"email_composer": {
"read_receipt_on": "Confirmación de lectura solicitada (haz clic para desactivar)",
"read_receipt_off": "Solicitar confirmación de lectura",
"new_message": "Nuevo Mensaje",
"reply": "Responder",
"reply_all": "Responder a Todos",
@@ -1006,6 +1017,17 @@
}
},
"email_behavior": {
"request_read_receipt": {
"label": "Solicitar confirmaciones de lectura de forma predeterminada",
"description": "Activar previamente la solicitud de confirmación de lectura al redactar un mensaje nuevo."
},
"read_receipt_response": {
"label": "Responder a las solicitudes de confirmación de lectura",
"description": "Qué hacer cuando un mensaje entrante solicita una confirmación de lectura.",
"ask": "Preguntar cada vez",
"always": "Enviar siempre",
"never": "No enviar nunca"
},
"title": "Comportamiento del Correo",
"description": "Configure cómo se manejan los correos",
"mark_read": {
+22
View File
@@ -260,6 +260,15 @@
"reschedule_prompt": "Saisissez une nouvelle date/heure, p. ex. 2026-05-04T15:30"
},
"email_viewer": {
"read_receipt": {
"prompt": "L''expéditeur demande un accusé de lecture :",
"send": "Envoyer l''accusé",
"ignore": "Ignorer",
"sent": "Accusé de lecture envoyé.",
"send_failed": "Impossible d''envoyer l''accusé de lecture",
"mdn_subject": "Lu : {subject}",
"mdn_body": "Ceci est un accusé de réception du message que vous avez envoyé à {recipient}.\n\nRemarque : cet accusé confirme uniquement que le message a été affiché sur l''ordinateur du destinataire. Il ne garantit pas que le destinataire a lu ou compris le contenu."
},
"no_email_selected": "Aucun email sélectionné",
"no_email_description": "Sélectionnez un email dans la liste pour le voir ici",
"no_conversation_selected": "Aucune conversation sélectionnée",
@@ -545,6 +554,8 @@
"undo_send": "Annuler lenvoi"
},
"email_composer": {
"read_receipt_on": "Accusé de lecture demandé (cliquez pour désactiver)",
"read_receipt_off": "Demander un accusé de lecture",
"new_message": "Nouveau message",
"reply": "Répondre",
"reply_all": "Répondre à tous",
@@ -1006,6 +1017,17 @@
}
},
"email_behavior": {
"request_read_receipt": {
"label": "Demander un accusé de lecture par défaut",
"description": "Activer au préalable la demande d''accusé de lecture lors de la rédaction d''un nouveau message."
},
"read_receipt_response": {
"label": "Répondre aux demandes d''accusé de lecture",
"description": "Que faire lorsqu''un message entrant demande un accusé de lecture.",
"ask": "Demander à chaque fois",
"always": "Toujours envoyer",
"never": "Ne jamais envoyer"
},
"title": "Comportement email",
"description": "Configurez la gestion des emails",
"mark_read": {
+22
View File
@@ -260,6 +260,15 @@
"reschedule_prompt": "Inserisci una nuova data/ora, ad es. 2026-05-04T15:30"
},
"email_viewer": {
"read_receipt": {
"prompt": "Il mittente richiede una conferma di lettura:",
"send": "Invia conferma",
"ignore": "Ignora",
"sent": "Conferma di lettura inviata.",
"send_failed": "Impossibile inviare la conferma di lettura",
"mdn_subject": "Letto: {subject}",
"mdn_body": "Questa è una conferma di lettura del messaggio che hai inviato a {recipient}.\n\nNota: questa conferma attesta solo che il messaggio è stato visualizzato sul computer del destinatario. Non garantisce che il destinatario abbia letto o compreso il contenuto."
},
"no_email_selected": "Nessun messaggio selezionato",
"no_email_description": "Seleziona un messaggio dall'elenco per visualizzarlo qui",
"no_conversation_selected": "Nessuna conversazione selezionata",
@@ -545,6 +554,8 @@
"undo_send": "Annulla invio"
},
"email_composer": {
"read_receipt_on": "Conferma di lettura richiesta (clicca per disattivare)",
"read_receipt_off": "Richiedi una conferma di lettura",
"new_message": "Nuovo messaggio",
"reply": "Rispondi",
"reply_all": "Rispondi a tutti",
@@ -1006,6 +1017,17 @@
}
},
"email_behavior": {
"request_read_receipt": {
"label": "Richiedi conferme di lettura per impostazione predefinita",
"description": "Attiva in anticipo la richiesta di conferma di lettura durante la composizione di un nuovo messaggio."
},
"read_receipt_response": {
"label": "Rispondi alle richieste di conferma di lettura",
"description": "Cosa fare quando un messaggio in arrivo richiede una conferma di lettura.",
"ask": "Chiedi ogni volta",
"always": "Invia sempre",
"never": "Non inviare mai"
},
"title": "Comportamento email",
"description": "Configura come vengono gestiti i messaggi",
"mark_read": {
+22
View File
@@ -260,6 +260,15 @@
"reschedule_prompt": "新しい日時を入力してください。例: 2026-05-04T15:30"
},
"email_viewer": {
"read_receipt": {
"prompt": "送信者が開封確認を求めています:",
"send": "確認を送信",
"ignore": "無視",
"sent": "開封確認を送信しました。",
"send_failed": "開封確認を送信できませんでした",
"mdn_subject": "開封済み: {subject}",
"mdn_body": "これは、あなたが {recipient} に送信したメッセージの開封確認です。\n\n注意: この確認は、メッセージが受信者のコンピューターに表示されたことを示すだけです。受信者が内容を読んだ、または理解したことを保証するものではありません。"
},
"no_email_selected": "メールが選択されていません",
"no_email_description": "リストからメールを選択して表示してください",
"no_conversation_selected": "会話が選択されていません",
@@ -545,6 +554,8 @@
"undo_send": "送信を取り消す"
},
"email_composer": {
"read_receipt_on": "開封確認を要求中(クリックで無効化)",
"read_receipt_off": "開封確認を要求する",
"new_message": "新規メッセージ",
"reply": "返信",
"reply_all": "全員に返信",
@@ -1006,6 +1017,17 @@
}
},
"email_behavior": {
"request_read_receipt": {
"label": "既定で開封確認を要求する",
"description": "新しいメッセージの作成時に、開封確認の要求をあらかじめ有効にします。"
},
"read_receipt_response": {
"label": "開封確認の要求に応答する",
"description": "受信メッセージが開封確認を求めたときの動作。",
"ask": "毎回確認する",
"always": "常に送信",
"never": "送信しない"
},
"title": "メール動作",
"description": "メールの処理方法を設定",
"mark_read": {
+22
View File
@@ -260,6 +260,15 @@
"reschedule_prompt": "새 날짜/시간을 입력하세요. 예: 2026-05-04T15:30"
},
"email_viewer": {
"read_receipt": {
"prompt": "보낸 사람이 읽음 확인을 요청합니다:",
"send": "확인 보내기",
"ignore": "무시",
"sent": "읽음 확인을 보냈습니다.",
"send_failed": "읽음 확인을 보낼 수 없습니다",
"mdn_subject": "읽음: {subject}",
"mdn_body": "이것은 {recipient}(으)로 보낸 메시지에 대한 읽음 확인입니다.\n\n참고: 이 확인은 메시지가 수신자의 컴퓨터에 표시되었음을 알릴 뿐입니다. 수신자가 내용을 읽거나 이해했다는 보장은 없습니다."
},
"no_email_selected": "메일이 선택되지 않았어요",
"no_email_description": "목록에서 메일을 선택하면 여기에 내용이 표시돼요",
"no_conversation_selected": "대화가 선택되지 않았어요",
@@ -545,6 +554,8 @@
"undo_send": "보내기 실행 취소"
},
"email_composer": {
"read_receipt_on": "읽음 확인 요청됨 (클릭하여 해제)",
"read_receipt_off": "읽음 확인 요청",
"new_message": "새 메시지",
"reply": "답장",
"reply_all": "전체 답장",
@@ -1006,6 +1017,17 @@
}
},
"email_behavior": {
"request_read_receipt": {
"label": "기본적으로 읽음 확인 요청",
"description": "새 메시지를 작성할 때 읽음 확인 요청을 미리 켭니다."
},
"read_receipt_response": {
"label": "읽음 확인 요청에 응답",
"description": "수신 메시지가 읽음 확인을 요청할 때의 동작.",
"ask": "매번 묻기",
"always": "항상 보내기",
"never": "보내지 않음"
},
"title": "메일 동작",
"description": "이메일 관련 동작 방식을 설정해 주세요",
"mark_read": {
+22
View File
@@ -260,6 +260,15 @@
"reschedule_prompt": "Ievadiet jaunu datumu/laiku, piem. 2026-05-04T15:30"
},
"email_viewer": {
"read_receipt": {
"prompt": "Sūtītājs pieprasa lasīšanas apstiprinājumu:",
"send": "Sūtīt apstiprinājumu",
"ignore": "Ignorēt",
"sent": "Lasīšanas apstiprinājums nosūtīts.",
"send_failed": "Neizdevās nosūtīt lasīšanas apstiprinājumu",
"mdn_subject": "Izlasīts: {subject}",
"mdn_body": "Šis ir lasīšanas apstiprinājums ziņojumam, ko nosūtījāt uz {recipient}.\n\nPiezīme: šis apstiprinājums tikai apliecina, ka ziņojums tika parādīts saņēmēja datorā. Tas negarantē, ka saņēmējs ir izlasījis vai sapratis saturu."
},
"no_email_selected": "Nav atlasīta neviena vēstule",
"no_email_description": "Atlasiet vēstuli no saraksta, lai to skatītu šeit",
"no_conversation_selected": "Nav atlasīta saruna",
@@ -545,6 +554,8 @@
"undo_send": "Atsaukt sūtīšanu"
},
"email_composer": {
"read_receipt_on": "Pieprasīts lasīšanas apstiprinājums (noklikšķiniet, lai atspējotu)",
"read_receipt_off": "Pieprasīt lasīšanas apstiprinājumu",
"new_message": "Jauns ziņojums",
"reply": "Atbildēt",
"reply_all": "Atbildēt visiem",
@@ -1006,6 +1017,17 @@
}
},
"email_behavior": {
"request_read_receipt": {
"label": "Pēc noklusējuma pieprasīt lasīšanas apstiprinājumus",
"description": "Sastādot jaunu ziņojumu, iepriekš ieslēgt lasīšanas apstiprinājuma pieprasījumu."
},
"read_receipt_response": {
"label": "Atbildēt uz lasīšanas apstiprinājuma pieprasījumiem",
"description": "Ko darīt, kad ienākošs ziņojums pieprasa lasīšanas apstiprinājumu.",
"ask": "Vaicāt katru reizi",
"always": "Vienmēr sūtīt",
"never": "Nekad nesūtīt"
},
"title": "Pasta darbība",
"description": "Pielāgojiet vēstuļu apstrādi",
"mark_read": {
+22
View File
@@ -260,6 +260,15 @@
"reschedule_prompt": "Voer een nieuwe datum/tijd in, bijv. 2026-05-04T15:30"
},
"email_viewer": {
"read_receipt": {
"prompt": "De afzender vraagt om een leesbevestiging:",
"send": "Bevestiging verzenden",
"ignore": "Negeren",
"sent": "Leesbevestiging verzonden.",
"send_failed": "Leesbevestiging kon niet worden verzonden",
"mdn_subject": "Gelezen: {subject}",
"mdn_body": "Dit is een leesbevestiging voor het bericht dat u hebt verzonden naar {recipient}.\n\nLet op: deze bevestiging geeft alleen aan dat het bericht is weergegeven op de computer van de ontvanger. Er is geen garantie dat de ontvanger de inhoud heeft gelezen of begrepen."
},
"no_email_selected": "Geen e-mail geselecteerd",
"no_email_description": "Selecteer een e-mail uit de lijst om deze hier te bekijken",
"no_conversation_selected": "Geen gesprek geselecteerd",
@@ -545,6 +554,8 @@
"undo_send": "Verzenden ongedaan maken"
},
"email_composer": {
"read_receipt_on": "Leesbevestiging aangevraagd (klik om uit te schakelen)",
"read_receipt_off": "Leesbevestiging aanvragen",
"new_message": "Nieuw bericht",
"reply": "Beantwoorden",
"reply_all": "Allen beantwoorden",
@@ -1006,6 +1017,17 @@
}
},
"email_behavior": {
"request_read_receipt": {
"label": "Standaard om leesbevestiging vragen",
"description": "De aanvraag voor een leesbevestiging vooraf inschakelen bij het opstellen van een nieuw bericht."
},
"read_receipt_response": {
"label": "Reageren op verzoeken om leesbevestiging",
"description": "Wat te doen wanneer een inkomend bericht om een leesbevestiging vraagt.",
"ask": "Elke keer vragen",
"always": "Altijd verzenden",
"never": "Nooit verzenden"
},
"title": "E-mailgedrag",
"description": "Configureer hoe e-mails worden verwerkt",
"mark_read": {
+22
View File
@@ -260,6 +260,15 @@
"reschedule_prompt": "Wprowadź nową datę/godzinę, np. 2026-05-04T15:30"
},
"email_viewer": {
"read_receipt": {
"prompt": "Nadawca prosi o potwierdzenie przeczytania:",
"send": "Wyślij potwierdzenie",
"ignore": "Ignoruj",
"sent": "Wysłano potwierdzenie przeczytania.",
"send_failed": "Nie udało się wysłać potwierdzenia przeczytania",
"mdn_subject": "Przeczytano: {subject}",
"mdn_body": "To jest potwierdzenie przeczytania wiadomości wysłanej do {recipient}.\n\nUwaga: to potwierdzenie oznacza jedynie, że wiadomość została wyświetlona na komputerze odbiorcy. Nie gwarantuje, że odbiorca przeczytał lub zrozumiał treść."
},
"no_email_selected": "Nie wybrano wiadomości",
"no_email_description": "Wybierz wiadomość z listy, aby ją wyświetlić",
"no_conversation_selected": "Nie wybrano konwersacji",
@@ -545,6 +554,8 @@
"undo_send": "Cofnij wysyłkę"
},
"email_composer": {
"read_receipt_on": "Zażądano potwierdzenia przeczytania (kliknij, aby wyłączyć)",
"read_receipt_off": "Zażądaj potwierdzenia przeczytania",
"new_message": "Nowa wiadomość",
"reply": "Odpowiedz",
"reply_all": "Odpowiedz wszystkim",
@@ -1006,6 +1017,17 @@
}
},
"email_behavior": {
"request_read_receipt": {
"label": "Domyślnie żądaj potwierdzeń przeczytania",
"description": "Włącz wcześniej żądanie potwierdzenia przeczytania podczas tworzenia nowej wiadomości."
},
"read_receipt_response": {
"label": "Odpowiadaj na żądania potwierdzenia przeczytania",
"description": "Co zrobić, gdy przychodząca wiadomość prosi o potwierdzenie przeczytania.",
"ask": "Pytaj za każdym razem",
"always": "Zawsze wysyłaj",
"never": "Nigdy nie wysyłaj"
},
"title": "Zachowanie poczty e-mail",
"description": "Skonfiguruj sposób obsługi wiadomości e-mail",
"mark_read": {
+22
View File
@@ -260,6 +260,15 @@
"reschedule_prompt": "Informe uma nova data/hora, ex. 2026-05-04T15:30"
},
"email_viewer": {
"read_receipt": {
"prompt": "O remetente solicita uma confirmação de leitura:",
"send": "Enviar confirmação",
"ignore": "Ignorar",
"sent": "Confirmação de leitura enviada.",
"send_failed": "Não foi possível enviar a confirmação de leitura",
"mdn_subject": "Lido: {subject}",
"mdn_body": "Este é um aviso de leitura da mensagem que você enviou para {recipient}.\n\nObservação: este aviso apenas confirma que a mensagem foi exibida no computador do destinatário. Não há garantia de que o destinatário tenha lido ou compreendido o conteúdo."
},
"no_email_selected": "Nenhum e-mail selecionado",
"no_email_description": "Selecione um e-mail da lista para visualizá-lo aqui",
"no_conversation_selected": "Nenhuma conversa selecionada",
@@ -545,6 +554,8 @@
"undo_send": "Desfazer envio"
},
"email_composer": {
"read_receipt_on": "Confirmação de leitura solicitada (clique para desativar)",
"read_receipt_off": "Solicitar confirmação de leitura",
"new_message": "Nova Mensagem",
"reply": "Responder",
"reply_all": "Responder a Todos",
@@ -1006,6 +1017,17 @@
}
},
"email_behavior": {
"request_read_receipt": {
"label": "Solicitar confirmações de leitura por padrão",
"description": "Ativar previamente a solicitação de confirmação de leitura ao redigir uma nova mensagem."
},
"read_receipt_response": {
"label": "Responder a solicitações de confirmação de leitura",
"description": "O que fazer quando uma mensagem recebida solicita uma confirmação de leitura.",
"ask": "Perguntar sempre",
"always": "Enviar sempre",
"never": "Nunca enviar"
},
"title": "Comportamento de E-mail",
"description": "Configure como os e-mails são manipulados",
"mark_read": {
+22
View File
@@ -260,6 +260,15 @@
"reschedule_prompt": "Введите новую дату/время, например 2026-05-04T15:30"
},
"email_viewer": {
"read_receipt": {
"prompt": "Отправитель запрашивает уведомление о прочтении:",
"send": "Отправить уведомление",
"ignore": "Игнорировать",
"sent": "Уведомление о прочтении отправлено.",
"send_failed": "Не удалось отправить уведомление о прочтении",
"mdn_subject": "Прочитано: {subject}",
"mdn_body": "Это уведомление о прочтении сообщения, отправленного вами на адрес {recipient}.\n\nПримечание: это уведомление лишь подтверждает, что сообщение было показано на компьютере получателя. Оно не гарантирует, что получатель прочитал или понял содержимое."
},
"no_email_selected": "Письмо не выбрано",
"no_email_description": "Выберите письмо из списка, чтобы просмотреть его здесь",
"no_conversation_selected": "Беседа не выбрана",
@@ -545,6 +554,8 @@
"undo_send": "Отменить отправку"
},
"email_composer": {
"read_receipt_on": "Запрошено уведомление о прочтении (нажмите, чтобы отключить)",
"read_receipt_off": "Запросить уведомление о прочтении",
"new_message": "Новое письмо",
"reply": "Ответить",
"reply_all": "Ответить всем",
@@ -1006,6 +1017,17 @@
}
},
"email_behavior": {
"request_read_receipt": {
"label": "Запрашивать уведомления о прочтении по умолчанию",
"description": "Заранее включать запрос уведомления о прочтении при создании нового сообщения."
},
"read_receipt_response": {
"label": "Отвечать на запросы уведомления о прочтении",
"description": "Что делать, когда входящее сообщение запрашивает уведомление о прочтении.",
"ask": "Спрашивать каждый раз",
"always": "Всегда отправлять",
"never": "Никогда не отправлять"
},
"title": "Поведение почты",
"description": "Настройте обработку писем",
"mark_read": {
+22
View File
@@ -260,6 +260,15 @@
"reschedule_prompt": "Yeni tarih/saat girin, ör. 2026-05-04T15:30"
},
"email_viewer": {
"read_receipt": {
"prompt": "Gönderen bir okundu bilgisi istiyor:",
"send": "Bilgi gönder",
"ignore": "Yoksay",
"sent": "Okundu bilgisi gönderildi.",
"send_failed": "Okundu bilgisi gönderilemedi",
"mdn_subject": "Okundu: {subject}",
"mdn_body": "Bu, {recipient} adresine gönderdiğiniz iletinin okundu bilgisidir.\n\nNot: Bu bilgi yalnızca iletinin alıcının bilgisayarında görüntülendiğini belirtir. Alıcının içeriği okuduğunu veya anladığını garanti etmez."
},
"no_email_selected": "E-posta seçilmedi",
"no_email_description": "Burada görüntülemek için listeden bir e-posta seçin",
"no_conversation_selected": "Konuşma seçilmedi",
@@ -545,6 +554,8 @@
"undo_send": "Göndermeyi geri al"
},
"email_composer": {
"read_receipt_on": "Okundu bilgisi istendi (devre dışı bırakmak için tıklayın)",
"read_receipt_off": "Okundu bilgisi iste",
"new_message": "Yeni İleti",
"reply": "Yanıtla",
"reply_all": "Tümünü Yanıtla",
@@ -1006,6 +1017,17 @@
}
},
"email_behavior": {
"request_read_receipt": {
"label": "Varsayılan olarak okundu bilgisi iste",
"description": "Yeni bir ileti yazarken okundu bilgisi isteğini önceden etkinleştir."
},
"read_receipt_response": {
"label": "Okundu bilgisi isteklerine yanıt ver",
"description": "Gelen bir ileti okundu bilgisi istediğinde ne yapılacağı.",
"ask": "Her seferinde sor",
"always": "Her zaman gönder",
"never": "Asla gönderme"
},
"title": "E-posta Davranışı",
"description": "E-postaların nasıl işleneceğini yapılandırın",
"mark_read": {
+22
View File
@@ -260,6 +260,15 @@
"reschedule_prompt": "Введіть нову дату/час, напр. 2026-05-04T15:30"
},
"email_viewer": {
"read_receipt": {
"prompt": "Відправник запитує сповіщення про прочитання:",
"send": "Надіслати сповіщення",
"ignore": "Ігнорувати",
"sent": "Сповіщення про прочитання надіслано.",
"send_failed": "Не вдалося надіслати сповіщення про прочитання",
"mdn_subject": "Прочитано: {subject}",
"mdn_body": "Це сповіщення про прочитання повідомлення, яке ви надіслали на адресу {recipient}.\n\nПримітка: це сповіщення лише підтверджує, що повідомлення було показано на комп''ютері отримувача. Воно не гарантує, що отримувач прочитав або зрозумів вміст."
},
"no_email_selected": "Електронна адреса не вибрана",
"no_email_description": "Виберіть електронний лист зі списку, щоб переглянути його тут",
"no_conversation_selected": "Розмова не вибрана",
@@ -545,6 +554,8 @@
"undo_send": "Скасувати надсилання"
},
"email_composer": {
"read_receipt_on": "Запитано сповіщення про прочитання (натисніть, щоб вимкнути)",
"read_receipt_off": "Запитати сповіщення про прочитання",
"new_message": "Нове повідомлення",
"reply": "Відповісти",
"reply_all": "Відповісти всім",
@@ -1006,6 +1017,17 @@
}
},
"email_behavior": {
"request_read_receipt": {
"label": "Запитувати сповіщення про прочитання за замовчуванням",
"description": "Заздалегідь вмикати запит сповіщення про прочитання під час створення нового повідомлення."
},
"read_receipt_response": {
"label": "Відповідати на запити сповіщення про прочитання",
"description": "Що робити, коли вхідне повідомлення запитує сповіщення про прочитання.",
"ask": "Запитувати щоразу",
"always": "Завжди надсилати",
"never": "Ніколи не надсилати"
},
"title": "Поведінка електронної пошти",
"description": "Налаштувати спосіб обробки електронних листів",
"mark_read": {
+22
View File
@@ -260,6 +260,15 @@
"reschedule_prompt": "输入新的日期/时间,例如 2026-05-04T15:30"
},
"email_viewer": {
"read_receipt": {
"prompt": "发件人请求已读回执:",
"send": "发送回执",
"ignore": "忽略",
"sent": "已读回执已发送。",
"send_failed": "无法发送已读回执",
"mdn_subject": "已读:{subject}",
"mdn_body": "这是您发送给 {recipient} 的邮件的已读回执。\n\n注意:此回执仅表示邮件已在收件人的计算机上显示,并不保证收件人已阅读或理解邮件内容。"
},
"no_email_selected": "未选择邮件",
"no_email_description": "从列表中选择一封邮件以在此查看",
"no_conversation_selected": "未选择会话",
@@ -545,6 +554,8 @@
"undo_send": "撤销发送"
},
"email_composer": {
"read_receipt_on": "已请求已读回执(点击以关闭)",
"read_receipt_off": "请求已读回执",
"new_message": "新邮件",
"reply": "回复",
"reply_all": "全部回复",
@@ -1006,6 +1017,17 @@
}
},
"email_behavior": {
"request_read_receipt": {
"label": "默认请求已读回执",
"description": "撰写新邮件时预先启用已读回执请求。"
},
"read_receipt_response": {
"label": "响应已读回执请求",
"description": "当收到的邮件请求已读回执时的处理方式。",
"ask": "每次询问",
"always": "始终发送",
"never": "从不发送"
},
"title": "邮件行为",
"description": "配置邮件的处理方式",
"mark_read": {