forked from espenhw/gnus
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmessage.texi
2536 lines (2026 loc) · 85.9 KB
/
message.texi
1
2
3
4
5
6
7
8
9
10
11
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
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
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
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
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
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
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
\input texinfo @c -*-texinfo-*-
@include gnus-overrides.texi
@setfilename message
@settitle Message Manual
@synindex fn cp
@synindex vr cp
@synindex pg cp
@copying
This file documents Message, the Emacs message composition mode.
Copyright @copyright{} 1996-2012 Free Software Foundation, Inc.
@quotation
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with no
Invariant Sections, with the Front-Cover texts being ``A GNU Manual'',
and with the Back-Cover Texts as in (a) below. A copy of the license
is included in the section entitled ``GNU Free Documentation License''.
(a) The FSF's Back-Cover Text is: ``You have the freedom to copy and
modify this GNU manual. Buying copies from the FSF supports it in
developing GNU and promoting software freedom.''
@end quotation
@end copying
@dircategory Emacs network features
@direntry
* Message: (message). Mail and news composition mode that
goes with Gnus.
@end direntry
@iftex
@finalout
@end iftex
@titlepage
@ifset WEBHACKDEVEL
@title Message Manual (DEVELOPMENT VERSION)
@end ifset
@ifclear WEBHACKDEVEL
@title Message Manual
@end ifclear
@author by Lars Magne Ingebrigtsen
@page
@vskip 0pt plus 1filll
@insertcopying
@end titlepage
@summarycontents
@contents
@node Top
@top Message
@ifnottex
@insertcopying
@end ifnottex
All message composition from Gnus (both mail and news) takes place in
Message mode buffers.
@menu
* Interface:: Setting up message buffers.
* Commands:: Commands you can execute in message mode buffers.
* Variables:: Customizing the message buffers.
* Compatibility:: Making Message backwards compatible.
* Appendices:: More technical things.
* GNU Free Documentation License:: The license for this documentation.
* Index:: Variable, function and concept index.
* Key Index:: List of Message mode keys.
@end menu
@c Adjust ../Makefile.in if you change the following lines:
Message is distributed with Gnus. The Gnus distribution
@c
corresponding to this manual is Ma Gnus v0.6
@node Interface
@chapter Interface
When a program (or a person) wants to respond to a message---reply,
follow up, forward, cancel---the program (or person) should just put
point in the buffer where the message is and call the required command.
@code{Message} will then pop up a new @code{message} mode buffer with
appropriate headers filled out, and the user can edit the message before
sending it.
@menu
* New Mail Message:: Editing a brand new mail message.
* New News Message:: Editing a brand new news message.
* Reply:: Replying via mail.
* Wide Reply:: Responding to all people via mail.
* Followup:: Following up via news.
* Canceling News:: Canceling a news article.
* Superseding:: Superseding a message.
* Forwarding:: Forwarding a message via news or mail.
* Resending:: Resending a mail message.
* Bouncing:: Bouncing a mail message.
* Mailing Lists:: Send mail to mailing lists.
@end menu
You can customize the Message Mode tool bar, see @kbd{M-x
customize-apropos RET message-tool-bar}. This feature is only available
in Emacs.
@node New Mail Message
@section New Mail Message
@findex message-mail
The @code{message-mail} command pops up a new message buffer.
Two optional parameters are accepted: The first will be used as the
@code{To} header and the second as the @code{Subject} header. If these
are @code{nil}, those two headers will be empty.
@node New News Message
@section New News Message
@findex message-news
The @code{message-news} command pops up a new message buffer.
This function accepts two optional parameters. The first will be used
as the @code{Newsgroups} header and the second as the @code{Subject}
header. If these are @code{nil}, those two headers will be empty.
@node Reply
@section Reply
@findex message-reply
The @code{message-reply} function pops up a message buffer that's a
reply to the message in the current buffer.
@vindex message-reply-to-function
Message uses the normal methods to determine where replies are to go
(@pxref{Responses}), but you can change the behavior to suit your needs
by fiddling with the @code{message-reply-to-function} variable.
If you want the replies to go to the @code{Sender} instead of the
@code{From}, you could do something like this:
@lisp
(setq message-reply-to-function
(lambda ()
(cond ((equal (mail-fetch-field "from") "somebody")
(list (cons 'To (mail-fetch-field "sender"))))
(t
nil))))
@end lisp
This function will be called narrowed to the head of the article that is
being replied to.
As you can see, this function should return a list. In this case, it
returns @code{((To . "Whom"))} if it has an opinion as to what the To
header should be. If it does not, it should just return @code{nil}, and
the normal methods for determining the To header will be used.
Each list element should be a cons, where the @sc{car} should be the
name of a header (e.g. @code{Cc}) and the @sc{cdr} should be the header
value (e.g. @samp{larsi@@ifi.uio.no}). All these headers will be
inserted into the head of the outgoing mail.
@node Wide Reply
@section Wide Reply
@findex message-wide-reply
The @code{message-wide-reply} pops up a message buffer that's a wide
reply to the message in the current buffer. A @dfn{wide reply} is a
reply that goes out to all people listed in the @code{To}, @code{From}
(or @code{Reply-to}) and @code{Cc} headers.
@vindex message-wide-reply-to-function
Message uses the normal methods to determine where wide replies are to go,
but you can change the behavior to suit your needs by fiddling with the
@code{message-wide-reply-to-function}. It is used in the same way as
@code{message-reply-to-function} (@pxref{Reply}).
@vindex message-dont-reply-to-names
Addresses that match the @code{message-dont-reply-to-names} regular
expression (or list of regular expressions) will be removed from the
@code{Cc} header. A value of @code{nil} means exclude your name only.
@vindex message-prune-recipient-rules
@code{message-prune-recipient-rules} is used to prune the addresses
used when doing a wide reply. It's meant to be used to remove
duplicate addresses and the like. It's a list of lists, where the
first element is a regexp to match the address to trigger the rule,
and the second is a regexp that will be expanded based on the first,
to match addresses to be pruned.
It's complicated to explain, but it's easy to use.
For instance, if you get an email from @samp{foo@@example.org}, but
@samp{foo@@zot.example.org} is also in the @code{Cc} list, then your
wide reply will go out to both these addresses, since they are unique.
To avoid this, do something like the following:
@lisp
(setq message-prune-recipient-rules
'(("^\\([^@@]+\\)@@\\(.*\\)" "\\1@@.*[.]\\2")))
@end lisp
If, for instance, you want all wide replies that involve messages from
@samp{cvs@@example.org} to go to that address, and nowhere else (i.e.,
remove all other recipients if @samp{cvs@@example.org} is in the
recipient list:
@lisp
(setq message-prune-recipient-rules
'(("cvs@@example.org" ".")))
@end lisp
@vindex message-wide-reply-confirm-recipients
If @code{message-wide-reply-confirm-recipients} is non-@code{nil} you
will be asked to confirm that you want to reply to multiple
recipients. The default is @code{nil}.
@node Followup
@section Followup
@findex message-followup
The @code{message-followup} command pops up a message buffer that's a
followup to the message in the current buffer.
@vindex message-followup-to-function
Message uses the normal methods to determine where followups are to go,
but you can change the behavior to suit your needs by fiddling with the
@code{message-followup-to-function}. It is used in the same way as
@code{message-reply-to-function} (@pxref{Reply}).
@vindex message-use-followup-to
The @code{message-use-followup-to} variable says what to do about
@code{Followup-To} headers. If it is @code{use}, always use the value.
If it is @code{ask} (which is the default), ask whether to use the
value. If it is @code{t}, use the value unless it is @samp{poster}. If
it is @code{nil}, don't use the value.
@node Canceling News
@section Canceling News
@findex message-cancel-news
The @code{message-cancel-news} command cancels the article in the
current buffer.
@vindex message-cancel-message
The value of @code{message-cancel-message} is inserted in the body of
the cancel message. The default is @samp{I am canceling my own
article.}.
@cindex Cancel Locks
@vindex message-insert-canlock
@cindex canlock
When Message posts news messages, it inserts @code{Cancel-Lock}
headers by default. This is a cryptographic header that ensures that
only you can cancel your own messages, which is nice. The downside
is that if you lose your @file{.emacs} file (which is where Gnus
stores the secret cancel lock password (which is generated
automatically the first time you use this feature)), you won't be
able to cancel your message. If you want to manage a password yourself,
you can put something like the following in your @file{~/.gnus.el} file:
@lisp
(setq canlock-password "geheimnis"
canlock-password-for-verify canlock-password)
@end lisp
Whether to insert the header or not is controlled by the
@code{message-insert-canlock} variable.
Not many news servers respect the @code{Cancel-Lock} header yet, but
this is expected to change in the future.
@node Superseding
@section Superseding
@findex message-supersede
The @code{message-supersede} command pops up a message buffer that will
supersede the message in the current buffer.
@vindex message-ignored-supersedes-headers
Headers matching the @code{message-ignored-supersedes-headers} are
removed before popping up the new message buffer. The default is@*
@samp{^Path:\\|^Date\\|^NNTP-Posting-Host:\\|^Xref:\\|^Lines:\\|@*
^Received:\\|^X-From-Line:\\|^X-Trace:\\|^X-Complaints-To:\\|@*
Return-Path:\\|^Supersedes:\\|^NNTP-Posting-Date:\\|^X-Trace:\\|@*
^X-Complaints-To:\\|^Cancel-Lock:\\|^Cancel-Key:\\|^X-Hashcash:\\|@*
^X-Payment:\\|^Approved:}.
@node Forwarding
@section Forwarding
@findex message-forward
The @code{message-forward} command pops up a message buffer to forward
the message in the current buffer. If given a prefix, forward using
news.
@table @code
@item message-forward-ignored-headers
@vindex message-forward-ignored-headers
All headers that match this regexp will be deleted when forwarding a message.
@item message-make-forward-subject-function
@vindex message-make-forward-subject-function
A list of functions that are called to generate a subject header for
forwarded messages. The subject generated by the previous function is
passed into each successive function.
The provided functions are:
@table @code
@item message-forward-subject-author-subject
@findex message-forward-subject-author-subject
Source of article (author or newsgroup), in brackets followed by the
subject.
@item message-forward-subject-fwd
Subject of article with @samp{Fwd:} prepended to it.
@end table
@item message-wash-forwarded-subjects
@vindex message-wash-forwarded-subjects
If this variable is @code{t}, the subjects of forwarded messages have
the evidence of previous forwards (such as @samp{Fwd:}, @samp{Re:},
@samp{(fwd)}) removed before the new subject is
constructed. The default value is @code{nil}.
@item message-forward-as-mime
@vindex message-forward-as-mime
If this variable is @code{t} (the default), forwarded messages are
included as inline @acronym{MIME} RFC822 parts. If it's @code{nil}, forwarded
messages will just be copied inline to the new message, like previous,
non @acronym{MIME}-savvy versions of Gnus would do.
@item message-forward-before-signature
@vindex message-forward-before-signature
If non-@code{nil}, put forwarded message before signature, else after.
@end table
@node Resending
@section Resending
@findex message-resend
The @code{message-resend} command will prompt the user for an address
and resend the message in the current buffer to that address.
@vindex message-ignored-resent-headers
Headers that match the @code{message-ignored-resent-headers} regexp will
be removed before sending the message.
@node Bouncing
@section Bouncing
@findex message-bounce
The @code{message-bounce} command will, if the current buffer contains a
bounced mail message, pop up a message buffer stripped of the bounce
information. A @dfn{bounced message} is typically a mail you've sent
out that has been returned by some @code{mailer-daemon} as
undeliverable.
@vindex message-ignored-bounced-headers
Headers that match the @code{message-ignored-bounced-headers} regexp
will be removed before popping up the buffer. The default is
@samp{^\\(Received\\|Return-Path\\|Delivered-To\\):}.
@node Mailing Lists
@section Mailing Lists
@cindex Mail-Followup-To
Sometimes while posting to mailing lists, the poster needs to direct
followups to the post to specific places. The Mail-Followup-To (MFT)
was created to enable just this. Three example scenarios where this is
useful:
@itemize @bullet
@item
A mailing list poster can use MFT to express that responses should be
sent to just the list, and not the poster as well. This will happen
if the poster is already subscribed to the list.
@item
A mailing list poster can use MFT to express that responses should be
sent to the list and the poster as well. This will happen if the poster
is not subscribed to the list.
@item
If a message is posted to several mailing lists, MFT may also be used
to direct the following discussion to one list only, because
discussions that are spread over several lists tend to be fragmented
and very difficult to follow.
@end itemize
Gnus honors the MFT header in other's messages (i.e. while following
up to someone else's post) and also provides support for generating
sensible MFT headers for outgoing messages as well.
@c @menu
@c * Honoring an MFT post:: What to do when one already exists
@c * Composing with a MFT header:: Creating one from scratch.
@c @end menu
@c @node Composing with a MFT header
@subsection Composing a correct MFT header automagically
The first step in getting Gnus to automagically generate a MFT header
in posts you make is to give Gnus a list of the mailing lists
addresses you are subscribed to. You can do this in more than one
way. The following variables would come in handy.
@table @code
@vindex message-subscribed-addresses
@item message-subscribed-addresses
This should be a list of addresses the user is subscribed to. Its
default value is @code{nil}. Example:
@lisp
(setq message-subscribed-addresses
'("ding@@gnus.org" "bing@@noose.org"))
@end lisp
@vindex message-subscribed-regexps
@item message-subscribed-regexps
This should be a list of regexps denoting the addresses of mailing
lists subscribed to. Default value is @code{nil}. Example: If you
want to achieve the same result as above:
@lisp
(setq message-subscribed-regexps
'("\\(ding@@gnus\\)\\|\\(bing@@noose\\)\\.org")
@end lisp
@vindex message-subscribed-address-functions
@item message-subscribed-address-functions
This can be a list of functions to be called (one at a time!!) to
determine the value of MFT headers. It is advisable that these
functions not take any arguments. Default value is @code{nil}.
There is a pre-defined function in Gnus that is a good candidate for
this variable. @code{gnus-find-subscribed-addresses} is a function
that returns a list of addresses corresponding to the groups that have
the @code{subscribed} (@pxref{Group Parameters, ,Group Parameters,
gnus, The Gnus Manual}) group parameter set to a non-@code{nil} value.
This is how you would do it.
@lisp
(setq message-subscribed-address-functions
'(gnus-find-subscribed-addresses))
@end lisp
@vindex message-subscribed-address-file
@item message-subscribed-address-file
You might be one organized human freak and have a list of addresses of
all subscribed mailing lists in a separate file! Then you can just
set this variable to the name of the file and life would be good.
@end table
You can use one or more of the above variables. All their values are
``added'' in some way that works :-)
Now you are all set. Just start composing a message as you normally do.
And just send it; as always. Just before the message is sent out, Gnus'
MFT generation thingy kicks in and checks if the message already has a
MFT field. If there is one, it is left alone. (Except if it's empty -
in that case, the field is removed and is not replaced with an
automatically generated one. This lets you disable MFT generation on a
per-message basis.) If there is none, then the list of recipient
addresses (in the To: and Cc: headers) is checked to see if one of them
is a list address you are subscribed to. If none of them is a list
address, then no MFT is generated; otherwise, a MFT is added to the
other headers and set to the value of all addresses in To: and Cc:
@kindex C-c C-f C-a
@findex message-generate-unsubscribed-mail-followup-to
@kindex C-c C-f C-m
@findex message-goto-mail-followup-to
Hm. ``So'', you ask, ``what if I send an email to a list I am not
subscribed to? I want my MFT to say that I want an extra copy.'' (This
is supposed to be interpreted by others the same way as if there were no
MFT, but you can use an explicit MFT to override someone else's
to-address group parameter.) The function
@code{message-generate-unsubscribed-mail-followup-to} might come in
handy. It is bound to @kbd{C-c C-f C-a} by default. In any case, you
can insert a MFT of your own choice; @kbd{C-c C-f C-m}
(@code{message-goto-mail-followup-to}) will help you get started.
@c @node Honoring an MFT post
@subsection Honoring an MFT post
@vindex message-use-mail-followup-to
When you followup to a post on a mailing list, and the post has a MFT
header, Gnus' action will depend on the value of the variable
@code{message-use-mail-followup-to}. This variable can be one of:
@table @code
@item use
Always honor MFTs. The To: and Cc: headers in your followup will be
derived from the MFT header of the original post. This is the default.
@item nil
Always dishonor MFTs (just ignore the darned thing)
@item ask
Gnus will prompt you for an action.
@end table
It is considered good netiquette to honor MFT, as it is assumed the
fellow who posted a message knows where the followups need to go
better than you do.
@node Commands
@chapter Commands
@menu
* Buffer Entry:: Commands after entering a Message buffer.
* Header Commands:: Commands for moving headers or changing headers.
* Movement:: Moving around in message buffers.
* Insertion:: Inserting things into message buffers.
* MIME:: @acronym{MIME} considerations.
* IDNA:: Non-@acronym{ASCII} domain name considerations.
* Security:: Signing and encrypting messages.
* Various Commands:: Various things.
* Sending:: Actually sending the message.
* Mail Aliases:: How to use mail aliases.
* Spelling:: Having Emacs check your spelling.
@end menu
@node Buffer Entry
@section Buffer Entry
@cindex undo
@kindex C-_
You most often end up in a Message buffer when responding to some other
message of some sort. Message does lots of handling of quoted text, and
may remove signatures, reformat the text, or the like---depending on
which used settings you're using. Message usually gets things right,
but sometimes it stumbles. To help the user unwind these stumblings,
Message sets the undo boundary before each major automatic action it
takes. If you press the undo key (usually located at @kbd{C-_}) a few
times, you will get back the un-edited message you're responding to.
@node Header Commands
@section Header Commands
@subsection Commands for moving to headers
These following commands move to the header in question. If it doesn't
exist, it will be inserted.
@table @kbd
@item C-c ?
@kindex C-c ?
@findex describe-mode
Describe the message mode.
@item C-c C-f C-t
@kindex C-c C-f C-t
@findex message-goto-to
Go to the @code{To} header (@code{message-goto-to}).
@item C-c C-f C-o
@kindex C-c C-f C-o
@findex message-goto-from
Go to the @code{From} header (@code{message-goto-from}). (The ``o''
in the key binding is for Originator.)
@item C-c C-f C-b
@kindex C-c C-f C-b
@findex message-goto-bcc
Go to the @code{Bcc} header (@code{message-goto-bcc}).
@item C-c C-f C-w
@kindex C-c C-f C-w
@findex message-goto-fcc
Go to the @code{Fcc} header (@code{message-goto-fcc}).
@item C-c C-f C-c
@kindex C-c C-f C-c
@findex message-goto-cc
Go to the @code{Cc} header (@code{message-goto-cc}).
@item C-c C-f C-s
@kindex C-c C-f C-s
@findex message-goto-subject
Go to the @code{Subject} header (@code{message-goto-subject}).
@item C-c C-f C-r
@kindex C-c C-f C-r
@findex message-goto-reply-to
Go to the @code{Reply-To} header (@code{message-goto-reply-to}).
@item C-c C-f C-n
@kindex C-c C-f C-n
@findex message-goto-newsgroups
Go to the @code{Newsgroups} header (@code{message-goto-newsgroups}).
@item C-c C-f C-d
@kindex C-c C-f C-d
@findex message-goto-distribution
Go to the @code{Distribution} header (@code{message-goto-distribution}).
@item C-c C-f C-f
@kindex C-c C-f C-f
@findex message-goto-followup-to
Go to the @code{Followup-To} header (@code{message-goto-followup-to}).
@item C-c C-f C-k
@kindex C-c C-f C-k
@findex message-goto-keywords
Go to the @code{Keywords} header (@code{message-goto-keywords}).
@item C-c C-f C-u
@kindex C-c C-f C-u
@findex message-goto-summary
Go to the @code{Summary} header (@code{message-goto-summary}).
@item C-c C-f C-i
@kindex C-c C-f C-i
@findex message-insert-or-toggle-importance
This inserts the @samp{Importance:} header with a value of
@samp{high}. This header is used to signal the importance of the
message to the receiver. If the header is already present in the
buffer, it cycles between the three valid values according to RFC
1376: @samp{low}, @samp{normal} and @samp{high}.
@item C-c C-f C-a
@kindex C-c C-f C-a
@findex message-generate-unsubscribed-mail-followup-to
Insert a reasonable @samp{Mail-Followup-To:} header
(@pxref{Mailing Lists}) in a post to an
unsubscribed list. When making original posts to a mailing list you are
not subscribed to, you have to type in a @samp{Mail-Followup-To:} header
by hand. The contents, usually, are the addresses of the list and your
own address. This function inserts such a header automatically. It
fetches the contents of the @samp{To:} header in the current mail
buffer, and appends the current @code{user-mail-address}.
If the optional argument @code{include-cc} is non-@code{nil}, the
addresses in the @samp{Cc:} header are also put into the
@samp{Mail-Followup-To:} header.
@end table
@subsection Commands to change headers
@table @kbd
@item C-c C-o
@kindex C-c C-o
@findex message-sort-headers
@vindex message-header-format-alist
Sort headers according to @code{message-header-format-alist}
(@code{message-sort-headers}).
@item C-c C-t
@kindex C-c C-t
@findex message-insert-to
Insert a @code{To} header that contains the @code{Reply-To} or
@code{From} header of the message you're following up
(@code{message-insert-to}).
@item C-c C-n
@kindex C-c C-n
@findex message-insert-newsgroups
Insert a @code{Newsgroups} header that reflects the @code{Followup-To}
or @code{Newsgroups} header of the article you're replying to
(@code{message-insert-newsgroups}).
@item C-c C-l
@kindex C-c C-l
@findex message-to-list-only
Send a message to the list only. Remove all addresses but the list
address from @code{To:} and @code{Cc:} headers.
@item C-c M-n
@kindex C-c M-n
@findex message-insert-disposition-notification-to
Insert a request for a disposition
notification. (@code{message-insert-disposition-notification-to}).
This means that if the recipient supports RFC 2298 she might send you a
notification that she received the message.
@item M-x message-insert-importance-high
@kindex M-x message-insert-importance-high
@findex message-insert-importance-high
@cindex Importance
Insert an @samp{Importance} header with a value of @samp{high},
deleting headers if necessary.
@item M-x message-insert-importance-low
@kindex M-x message-insert-importance-low
@findex message-insert-importance-low
@cindex Importance
Insert an @samp{Importance} header with a value of @samp{low}, deleting
headers if necessary.
@item C-c C-f s
@kindex C-c C-f s
@findex message-change-subject
@cindex Subject
Change the current @samp{Subject} header. Ask for new @samp{Subject}
header and append @samp{(was: <Old Subject>)}. The old subject can be
stripped on replying, see @code{message-subject-trailing-was-query}
(@pxref{Message Headers}).
@item C-c C-f x
@kindex C-c C-f x
@findex message-cross-post-followup-to
@vindex message-cross-post-default
@vindex message-cross-post-note-function
@cindex X-Post
@cindex cross-post
Set up the @samp{FollowUp-To} header with a target newsgroup for a
cross-post, add that target newsgroup to the @samp{Newsgroups} header if
it is not a member of @samp{Newsgroups}, and insert a note in the body.
If @code{message-cross-post-default} is @code{nil} or if this command is
called with a prefix-argument, only the @samp{FollowUp-To} header will
be set but the target newsgroup will not be added to the
@samp{Newsgroups} header. The function to insert a note is controlled
by the @code{message-cross-post-note-function} variable.
@item C-c C-f t
@kindex C-c C-f t
@findex message-reduce-to-to-cc
Replace contents of @samp{To} header with contents of @samp{Cc} or
@samp{Bcc} header. (Iff @samp{Cc} header is not present, @samp{Bcc}
header will be used instead.)
@item C-c C-f w
@kindex C-c C-f w
@findex message-insert-wide-reply
Insert @samp{To} and @samp{Cc} headers as if you were doing a wide
reply even if the message was not made for a wide reply first.
@item C-c C-f a
@kindex C-c C-f a
@findex message-add-archive-header
@vindex message-archive-header
@vindex message-archive-note
@cindex X-No-Archive
Insert @samp{X-No-Archive: Yes} in the header and a note in the body.
The header and the note can be customized using
@code{message-archive-header} and @code{message-archive-note}. When
called with a prefix argument, ask for a text to insert. If you don't
want the note in the body, set @code{message-archive-note} to
@code{nil}.
@end table
@node Movement
@section Movement
@table @kbd
@item C-c C-b
@kindex C-c C-b
@findex message-goto-body
Move to the beginning of the body of the message
(@code{message-goto-body}).
@item C-c C-i
@kindex C-c C-i
@findex message-goto-signature
Move to the signature of the message (@code{message-goto-signature}).
@item C-a
@kindex C-a
@findex message-beginning-of-line
@vindex message-beginning-of-line
If at beginning of header value, go to beginning of line, else go to
beginning of header value. (The header value comes after the header
name and the colon.) This behavior can be disabled by toggling
the variable @code{message-beginning-of-line}.
@end table
@node Insertion
@section Insertion
@table @kbd
@item C-c C-y
@kindex C-c C-y
@findex message-yank-original
Yank the message that's being replied to into the message buffer
(@code{message-yank-original}).
@item C-c C-M-y
@kindex C-c C-M-y
@findex message-yank-buffer
Prompt for a buffer name and yank the contents of that buffer into the
message buffer (@code{message-yank-buffer}).
@item C-c C-q
@kindex C-c C-q
@findex message-fill-yanked-message
Fill the yanked message (@code{message-fill-yanked-message}). Warning:
Can severely mess up the yanked text if its quoting conventions are
strange. You'll quickly get a feel for when it's safe, though. Anyway,
just remember that @kbd{C-x u} (@code{undo}) is available and you'll be
all right.
@item C-c C-w
@kindex C-c C-w
@findex message-insert-signature
Insert a signature at the end of the buffer
(@code{message-insert-signature}).
@item C-c M-h
@kindex C-c M-h
@findex message-insert-headers
Insert the message headers (@code{message-insert-headers}).
@item C-c M-m
@kindex C-c M-m
@findex message-mark-inserted-region
Mark some region in the current article with enclosing tags. See
@code{message-mark-insert-begin} and @code{message-mark-insert-end}.
When called with a prefix argument, use slrn style verbatim marks
(@samp{#v+} and @samp{#v-}).
@item C-c M-f
@kindex C-c M-f
@findex message-mark-insert-file
Insert a file in the current article with enclosing tags.
See @code{message-mark-insert-begin} and @code{message-mark-insert-end}.
When called with a prefix argument, use slrn style verbatim marks
(@samp{#v+} and @samp{#v-}).
@end table
@node MIME
@section MIME
@cindex MML
@cindex MIME
@cindex multipart
@cindex attachment
Message is a @acronym{MIME}-compliant posting agent. The user generally
doesn't have to do anything to make the @acronym{MIME} happen---Message will
automatically add the @code{Content-Type} and
@code{Content-Transfer-Encoding} headers.
@findex mml-attach-file
@kindex C-c C-a
The most typical thing users want to use the multipart things in
@acronym{MIME} for is to add ``attachments'' to mail they send out.
This can be done with the @kbd{C-c C-a} command (@kbd{M-x mml-attach-file}),
which will prompt for a file name and a @acronym{MIME} type.
@vindex mml-dnd-protocol-alist
@vindex mml-dnd-attach-options
If your Emacs supports drag and drop, you can also drop the file in the
Message buffer. The variable @code{mml-dnd-protocol-alist} specifies
what kind of action is done when you drop a file into the Message
buffer. The variable @code{mml-dnd-attach-options} controls which
@acronym{MIME} options you want to specify when dropping a file. If it
is a list, valid members are @code{type}, @code{description} and
@code{disposition}. @code{disposition} implies @code{type}. If it is
@code{nil}, don't ask for options. If it is @code{t}, ask the user
whether or not to specify options.
You can also create arbitrarily complex multiparts using the @acronym{MML}
language (@pxref{Composing, , Composing, emacs-mime, The Emacs MIME
Manual}).
@node IDNA
@section IDNA
@cindex IDNA
@cindex internationalized domain names
@cindex non-ascii domain names
@acronym{IDNA} is a standard way to encode non-@acronym{ASCII} domain
names into a readable @acronym{ASCII} string. The details can be
found in RFC 3490.
Message is a @acronym{IDNA}-compliant posting agent. The user
generally doesn't have to do anything to make the @acronym{IDNA}
happen---Message will encode non-@acronym{ASCII} domain names in @code{From},
@code{To}, and @code{Cc} headers automatically.
Until @acronym{IDNA} becomes more well known, Message queries you
whether @acronym{IDNA} encoding of the domain name really should
occur. Some users might not be aware that domain names can contain
non-@acronym{ASCII} now, so this gives them a safety net if they accidentally
typed a non-@acronym{ASCII} domain name.
@vindex message-use-idna
The @code{message-use-idna} variable control whether @acronym{IDNA} is
used. If the variable is @code{nil} no @acronym{IDNA} encoding will
ever happen, if it is set to the symbol @code{ask} the user will be
queried, and if set to @code{t} (which is the default if @acronym{IDNA}
is fully available) @acronym{IDNA} encoding happens automatically.
@findex message-idna-to-ascii-rhs
If you want to experiment with the @acronym{IDNA} encoding, you can
invoke @kbd{M-x message-idna-to-ascii-rhs RET} in the message buffer
to have the non-@acronym{ASCII} domain names encoded while you edit
the message.
Note that you must have @uref{http://www.gnu.org/software/libidn/, GNU
Libidn} installed in order to use this functionality.
@node Security
@section Security
@cindex Security
@cindex S/MIME
@cindex PGP
@cindex PGP/MIME
@cindex sign
@cindex encrypt
@cindex secure
Using the @acronym{MML} language, Message is able to create digitally
signed and digitally encrypted messages. Message (or rather
@acronym{MML}) currently support @acronym{PGP} (RFC 1991),
@acronym{PGP/MIME} (RFC 2015/3156) and @acronym{S/MIME}.
@menu
* Signing and encryption:: Signing and encrypting commands.
* Using S/MIME:: Using S/MIME
* Using PGP/MIME:: Using PGP/MIME
* PGP Compatibility:: Compatibility with older implementations
@end menu
@node Signing and encryption
@subsection Signing and encrypting commands
Instructing @acronym{MML} to perform security operations on a
@acronym{MIME} part is done using the @kbd{C-c C-m s} key map for
signing and the @kbd{C-c C-m c} key map for encryption, as follows.
@table @kbd
@item C-c C-m s s
@kindex C-c C-m s s
@findex mml-secure-message-sign-smime
Digitally sign current message using @acronym{S/MIME}.
@item C-c C-m s o
@kindex C-c C-m s o
@findex mml-secure-message-sign-pgp
Digitally sign current message using @acronym{PGP}.
@item C-c C-m s p
@kindex C-c C-m s p
@findex mml-secure-message-sign-pgpmime
Digitally sign current message using @acronym{PGP/MIME}.
@item C-c C-m c s
@kindex C-c C-m c s
@findex mml-secure-message-encrypt-smime
Digitally encrypt current message using @acronym{S/MIME}.
@item C-c C-m c o
@kindex C-c C-m c o
@findex mml-secure-message-encrypt-pgp
Digitally encrypt current message using @acronym{PGP}.
@item C-c C-m c p
@kindex C-c C-m c p
@findex mml-secure-message-encrypt-pgpmime
Digitally encrypt current message using @acronym{PGP/MIME}.
@item C-c C-m C-n
@kindex C-c C-m C-n
@findex mml-unsecure-message
Remove security related @acronym{MML} tags from message.
@end table
These commands do not immediately sign or encrypt the message, they
merely insert the proper @acronym{MML} secure tag to instruct the