59 intptr_t value,
struct Buffer *err)
61 const int min_length = 78;
62 const int max_length = 998;
64 if ((value >= min_length) && (value <= max_length))
68 buf_printf(err,
_(
"Option %s must be between %d and %d inclusive"),
69 cdef->
name, min_length, max_length);
77 intptr_t value,
struct Buffer *err)
79 const struct Slist *smtp_auth_methods = (
const struct Slist *) value;
80 if (!smtp_auth_methods || (smtp_auth_methods->
count == 0))
103 intptr_t value,
struct Buffer *err)
106 const char *valstr = (
const char *) value;
110 const char c = valstr[strcspn(valstr,
"|&;()<>[]{}$`'~\"\\*?")];
115 buf_printf(err,
_(
"Option %s must not contain shell metacharacters: %c"), cdef->
name, c);
130 { NULL, NULL, 0, -1, -1, NULL }
140 "Abort sending the email if attachments are missing"
142 {
"abort_noattach_regex",
DT_REGEX,
IP "\\<(attach|attached|attachments?)\\>", 0, NULL,
143 "Regex to match text indicating attachments are expected"
146 "Abort creating the email if subject is missing"
149 "Abort the sending if the message hasn't been edited"
151 {
"allow_8bit",
DT_BOOL,
true, 0, NULL,
152 "Allow 8-bit messages, don't use quoted-printable or base64"
154 {
"ask_bcc",
DT_BOOL,
false, 0, NULL,
155 "Ask the user for the blind-carbon-copy recipients"
157 {
"ask_cc",
DT_BOOL,
false, 0, NULL,
158 "Ask the user for the carbon-copy recipients"
160 {
"ask_followup_to",
DT_BOOL,
false, 0, NULL,
161 "(nntp) Ask the user for follow-up groups before editing"
163 {
"ask_x_comment_to",
DT_BOOL,
false, 0, NULL,
164 "(nntp) Ask the user for the 'X-Comment-To' field before editing"
167 "When attaching files, use one of these character sets"
171 "Message to start a reply, 'On DATE, PERSON wrote:'"
173 {
"attribution_locale",
DT_STRING, 0, 0, NULL,
174 "Locale for dates in the attribution message"
177 "Suffix message to add after reply text"
179 {
"bounce_delivered",
DT_BOOL,
true, 0, NULL,
180 "Add 'Delivered-To' to bounced messages"
182 {
"content_type",
DT_STRING,
IP "text/plain", 0, NULL,
183 "Default 'Content-Type' for newly composed messages"
185 {
"crypt_auto_encrypt",
DT_BOOL,
false, 0, NULL,
186 "Automatically PGP encrypt all outgoing mail"
188 {
"crypt_auto_pgp",
DT_BOOL,
true, 0, NULL,
189 "Allow automatic PGP functions"
191 {
"crypt_auto_sign",
DT_BOOL,
false, 0, NULL,
192 "Automatically PGP sign all outgoing mail"
194 {
"crypt_auto_smime",
DT_BOOL,
true, 0, NULL,
195 "Allow automatic SMIME functions"
197 {
"crypt_reply_encrypt",
DT_BOOL,
true, 0, NULL,
198 "Encrypt replies to encrypted messages"
200 {
"crypt_reply_sign",
DT_BOOL,
false, 0, NULL,
201 "Sign replies to signed messages"
203 {
"crypt_reply_sign_encrypted",
DT_BOOL,
false, 0, NULL,
204 "Sign replies to encrypted messages"
207 "Request notification for message delivery or delay"
210 "What to send as a notification of message delivery or delay"
212 {
"empty_subject",
DT_STRING,
IP "Re: your mail", 0, NULL,
213 "Subject to use when replying to an email with none"
215 {
"encode_from",
DT_BOOL,
false, 0, NULL,
216 "Encode 'From ' as 'quote-printable' at the beginning of lines"
218 {
"fast_reply",
DT_BOOL,
false, 0, NULL,
219 "Don't prompt for the recipients and subject when replying/forwarding"
222 "Save sent message with all their attachments"
224 {
"fcc_before_send",
DT_BOOL,
false, 0, NULL,
225 "Save FCCs before sending the message"
227 {
"fcc_clear",
DT_BOOL,
false, 0, NULL,
228 "Save sent messages unencrypted and unsigned"
230 {
"followup_to",
DT_BOOL,
true, 0, NULL,
231 "Add the 'Mail-Followup-To' header is generated when sending mail"
234 "Forward attachments when forwarding a message"
238 "Prefix message for forwarded messages"
242 "Suffix message for forwarded messages"
244 {
"forward_decrypt",
DT_BOOL,
true, 0, NULL,
245 "Decrypt the message when forwarding it"
248 "Automatically start the editor when forwarding a message"
251 "printf-like format string to control the subject when forwarding a message"
253 {
"forward_references",
DT_BOOL,
false, 0, NULL,
254 "Set the 'In-Reply-To' and 'References' headers when forwarding a message"
257 "Greeting string added to the top of all messages"
259 {
"hdrs",
DT_BOOL,
true, 0, NULL,
260 "Add custom headers to outgoing mail"
262 {
"hidden_host",
DT_BOOL,
false, 0, NULL,
263 "Don't use the hostname, just the domain, when generating the message id"
266 "Honour the 'Mail-Followup-To' header when group replying"
268 {
"ignore_list_reply_to",
DT_BOOL,
false, 0, NULL,
269 "Ignore the 'Reply-To' header when using `<reply>` on a mailing list"
272 "Include a copy of the email that's being replied to"
275 "(nntp) External command to post news articles"
277 {
"me_too",
DT_BOOL,
false, 0, NULL,
278 "Remove the user's address from the list of recipients"
280 {
"mime_forward_decode",
DT_BOOL,
false, 0, NULL,
281 "Decode the forwarded message before attaching it"
284 "External command to determine the MIME type of an attachment"
286 {
"mime_type_query_first",
DT_BOOL,
false, 0, NULL,
287 "Run the `$mime_type_query_command` before the mime.types lookup"
289 {
"nm_record",
DT_BOOL,
false, 0, NULL,
290 "(notmuch) If the 'record' mailbox (sent mail) should be indexed"
292 {
"pgp_reply_inline",
DT_BOOL,
false, 0, NULL,
293 "Reply using old-style inline PGP messages (not recommended)"
295 {
"postpone_encrypt",
DT_BOOL,
false, 0, NULL,
296 "Self-encrypt postponed messages"
298 {
"postpone_encrypt_as",
DT_STRING, 0, 0, NULL,
299 "Fallback encryption key for postponed messages"
302 "Recall postponed mesaages when asked to compose a message"
304 {
"reply_self",
DT_BOOL,
false, 0, NULL,
305 "Really reply to yourself, when replying to your own email"
308 "Address to use as a 'Reply-To' header"
310 {
"reply_with_xorig",
DT_BOOL,
false, 0, NULL,
311 "Create 'From' header from 'X-Original-To' header"
313 {
"resume_draft_files",
DT_BOOL,
false, 0, NULL,
314 "Process draft files like postponed messages"
316 {
"reverse_name",
DT_BOOL,
false, 0, NULL,
317 "Set the 'From' from the address the email was sent to"
319 {
"reverse_real_name",
DT_BOOL,
true, 0, NULL,
320 "Set the 'From' from the full 'To' address the email was sent to"
323 "External command to send email"
325 {
"sendmail_wait",
DT_NUMBER, 0, 0, NULL,
326 "Time to wait for sendmail to finish"
328 {
"sig_dashes",
DT_BOOL,
true, 0, NULL,
329 "Insert '-- ' before the signature"
331 {
"sig_on_top",
DT_BOOL,
false, 0, NULL,
332 "Insert the signature before the quoted text"
335 "File containing a signature to append to all mail"
338 "(smtp) List of allowed authentication methods (colon-separated)"
341 "(smtp) External command to generate OAUTH refresh token"
344 "(smtp) Password for the SMTP server"
347 "(smtp) Url of the SMTP server"
350 "(smtp) Username for the SMTP server"
352 {
"use_8bit_mime",
DT_BOOL,
false, 0, NULL,
353 "Use 8-bit messages and ESMTP to send messages"
355 {
"use_envelope_from",
DT_BOOL,
false, 0, NULL,
356 "Set the envelope sender of the message"
358 {
"use_from",
DT_BOOL,
true, 0, NULL,
359 "Set the 'From' header for outgoing mail"
361 {
"user_agent",
DT_BOOL,
false, 0, NULL,
362 "Add a 'User-Agent' header to outgoing mail"
365 "Width to wrap headers in outgoing messages"
367 {
"write_bcc",
DT_BOOL,
false, 0, NULL,
368 "Write out the 'Bcc' field when preparing to send a mail"
371 {
"abort_noattach_regexp",
DT_SYNONYM,
IP "abort_noattach_regex",
IP "2021-03-21" },
374 {
"ask_follow_up",
DT_SYNONYM,
IP "ask_followup_to",
IP "2023-01-20" },
375 {
"attach_keyword",
DT_SYNONYM,
IP "abort_noattach_regex",
IP "2021-03-21" },
376 {
"attribution",
DT_SYNONYM,
IP "attribution_intro",
IP "2023-02-20" },
377 {
"crypt_autoencrypt",
DT_SYNONYM,
IP "crypt_auto_encrypt",
IP "2021-03-21" },
378 {
"crypt_autopgp",
DT_SYNONYM,
IP "crypt_auto_pgp",
IP "2021-03-21" },
379 {
"crypt_autosign",
DT_SYNONYM,
IP "crypt_auto_sign",
IP "2021-03-21" },
380 {
"crypt_autosmime",
DT_SYNONYM,
IP "crypt_auto_smime",
IP "2021-03-21" },
381 {
"crypt_replyencrypt",
DT_SYNONYM,
IP "crypt_reply_encrypt",
IP "2021-03-21" },
382 {
"crypt_replysign",
DT_SYNONYM,
IP "crypt_reply_sign",
IP "2021-03-21" },
383 {
"crypt_replysignencrypted",
DT_SYNONYM,
IP "crypt_reply_sign_encrypted",
IP "2021-03-21" },
384 {
"envelope_from",
DT_SYNONYM,
IP "use_envelope_from",
IP "2021-03-21" },
385 {
"forw_decrypt",
DT_SYNONYM,
IP "forward_decrypt",
IP "2021-03-21" },
386 {
"forw_format",
DT_SYNONYM,
IP "forward_format",
IP "2021-03-21" },
388 {
"pgp_autoencrypt",
DT_SYNONYM,
IP "crypt_auto_encrypt",
IP "2021-03-21" },
389 {
"pgp_autosign",
DT_SYNONYM,
IP "crypt_auto_sign",
IP "2021-03-21" },
390 {
"pgp_auto_traditional",
DT_SYNONYM,
IP "pgp_reply_inline",
IP "2021-03-21" },
391 {
"pgp_replyencrypt",
DT_SYNONYM,
IP "crypt_reply_encrypt",
IP "2021-03-21" },
392 {
"pgp_replyinline",
DT_SYNONYM,
IP "pgp_reply_inline",
IP "2021-03-21" },
393 {
"pgp_replysign",
DT_SYNONYM,
IP "crypt_reply_sign",
IP "2021-03-21" },
394 {
"pgp_replysignencrypted",
DT_SYNONYM,
IP "crypt_reply_sign_encrypted",
IP "2021-03-21" },
395 {
"post_indent_str",
DT_SYNONYM,
IP "post_indent_string",
IP "2021-03-21" },
396 {
"post_indent_string",
DT_SYNONYM,
IP "attribution_trailer",
IP "2023-02-20" },
397 {
"reverse_realname",
DT_SYNONYM,
IP "reverse_real_name",
IP "2021-03-21" },
398 {
"use_8bitmime",
DT_SYNONYM,
IP "use_8bit_mime",
IP "2021-03-21" },
int buf_printf(struct Buffer *buf, const char *fmt,...)
Format a string overwriting a Buffer.
Convenience wrapper for the config headers.
bool cs_register_variables(const struct ConfigSet *cs, struct ConfigDef vars[])
Register a set of config items.
#define CSR_ERR_INVALID
Value hasn't been set.
#define CSR_SUCCESS
Action completed successfully.
@ E_TYPE_STRING
Data is a string.
@ ED_ENVELOPE
Envelope ED_ENV_ ExpandoDataEnvelope.
Structs that make up an email.
@ ED_ENV_REAL_NAME
Envelope.to (first)
@ ED_ENV_USER_NAME
Envelope.to (first)
@ ED_ENV_FIRST_NAME
Envelope.from, Envelope.to, Envelope.cc.
static int smtp_auth_validator(const struct ConfigSet *cs, const struct ConfigDef *cdef, intptr_t value, struct Buffer *err)
Validate the "smtp_authenticators" config variable - Implements ConfigDef::validator() -.
int charset_slist_validator(const struct ConfigSet *cs, const struct ConfigDef *cdef, intptr_t value, struct Buffer *err)
Validate the multiple "charset" config variables - Implements ConfigDef::validator() -.
static int wrapheaders_validator(const struct ConfigSet *cs, const struct ConfigDef *cdef, intptr_t value, struct Buffer *err)
Validate the "wrap_headers" config variable - Implements ConfigDef::validator() -.
static int simple_command_validator(const struct ConfigSet *cs, const struct ConfigDef *cdef, intptr_t value, struct Buffer *err)
Validate the "sendmail" config variable - Implements ConfigDef::validator() -.
bool config_init_send(struct ConfigSet *cs)
Register send config variables - Implements module_init_config_t -.
Convenience wrapper for the library headers.
const struct ExpandoDefinition NntpFormatDef[]
Expando definitions.
@ MUTT_NO
User answered 'No', or assume 'No'.
@ MUTT_ASKYES
Ask the user, defaulting to 'Yes'.
@ MUTT_YES
User answered 'Yes', or assume 'Yes'.
#define STAILQ_FOREACH(var, head, field)
bool sasl_auth_validator(const char *authenticator)
Validate an auth method against Cyrus SASL methods.
static struct ConfigDef SendVars[]
Config definitions for the send library.
static const struct ExpandoDefinition *const IndexFormatDefNoPadding
IndexFormatDefNoPadding - Index format definitions, without padding or arrow.
static const struct ExpandoDefinition GreetingFormatDef[]
Expando definitions.
bool smtp_auth_is_valid(const char *authenticator)
Check if string is a valid smtp authentication method.
Send email to an SMTP server.
String manipulation buffer.
const char * name
User-visible name.
Container for lots of config items.
Definition of a format string.
struct ListHead head
List containing values.
size_t count
Number of values in list.
#define D_SLIST_SEP_COLON
Slist items are colon-separated.
#define D_INTERNAL_DEPRECATED
Config item shouldn't be used any more.
#define D_STRING_COMMAND
A command.
#define D_SLIST_ALLOW_EMPTY
Slist may be empty.
#define D_L10N_STRING
String can be localised.
#define D_PATH_FILE
Path is a file.
@ DT_SLIST
a list of strings
@ DT_QUAD
quad-option (no/yes/ask-no/ask-yes)
@ DT_SYNONYM
synonym for another variable
@ DT_REGEX
regular expressions
@ DT_PATH
a path to a file/directory
#define D_SENSITIVE
Contains sensitive value, e.g. password.
#define D_NOT_EMPTY
Empty strings are not allowed.
#define D_INTEGER_NOT_NEGATIVE
Negative numbers are not allowed.