@@ -72,6 +72,7 @@ sub usage {
72
72
73
73
Automating:
74
74
--identity <str> * Use the sendemail.<id> options.
75
+ --to-cmd <str> * Email To: via `<str> \$ patch_path`
75
76
--cc-cmd <str> * Email Cc: via `<str> \$ patch_path`
76
77
--suppress-cc <str> * author, self, sob, cc, cccmd, body, bodycc, all.
77
78
--[no-]signed-off-by-cc * Send to Signed-off-by: addresses. Default on.
@@ -191,7 +192,8 @@ sub do_edit {
191
192
}
192
193
193
194
# Variables with corresponding config settings
194
- my ($thread , $chain_reply_to , $suppress_from , $signed_off_by_cc , $cc_cmd );
195
+ my ($thread , $chain_reply_to , $suppress_from , $signed_off_by_cc );
196
+ my ($to_cmd , $cc_cmd );
195
197
my ($smtp_server , $smtp_server_port , @smtp_server_options );
196
198
my ($smtp_authuser , $smtp_encryption );
197
199
my ($identity , $aliasfiletype , @alias_files , $smtp_domain );
@@ -220,6 +222,7 @@ sub do_edit {
220
222
" smtppass" => \$smtp_authpass ,
221
223
" smtpdomain" => \$smtp_domain ,
222
224
" to" => \@to ,
225
+ " tocmd" => \$to_cmd ,
223
226
" cc" => \@initial_cc ,
224
227
" cccmd" => \$cc_cmd ,
225
228
" aliasfiletype" => \$aliasfiletype ,
@@ -278,6 +281,7 @@ sub signal_handler {
278
281
" in-reply-to=s" => \$initial_reply_to ,
279
282
" subject=s" => \$initial_subject ,
280
283
" to=s" => \@to ,
284
+ " to-cmd=s" => \$to_cmd ,
281
285
" no-to" => \$no_to ,
282
286
" cc=s" => \@initial_cc ,
283
287
" no-cc" => \$no_cc ,
729
733
$prompting ++;
730
734
}
731
735
732
- if (!@to ) {
736
+ if (!@to && ! defined $to_cmd ) {
733
737
my $to = ask(" Who should the emails be sent to? " );
734
738
push @to , parse_address_line($to ) if defined $to ; # sanitized/validated later
735
739
$prompting ++;
@@ -1258,21 +1262,10 @@ sub send_message {
1258
1262
}
1259
1263
close F;
1260
1264
1261
- if (defined $cc_cmd && !$suppress_cc {' cccmd' }) {
1262
- open (F, " $cc_cmd \Q $t \E |" )
1263
- or die " (cc-cmd) Could not execute '$cc_cmd '" ;
1264
- while (<F>) {
1265
- my $c = $_ ;
1266
- $c =~ s / ^\s *// g ;
1267
- $c =~ s /\n $// g ;
1268
- next if ($c eq $sender and $suppress_from );
1269
- push @cc , $c ;
1270
- printf (" (cc-cmd) Adding cc: %s from: '%s '\n " ,
1271
- $c , $cc_cmd ) unless $quiet ;
1272
- }
1273
- close F
1274
- or die " (cc-cmd) failed to close pipe to '$cc_cmd '" ;
1275
- }
1265
+ push @to , recipients_cmd(" to-cmd" , " to" , $to_cmd , $t )
1266
+ if defined $to_cmd ;
1267
+ push @cc , recipients_cmd(" cc-cmd" , " cc" , $cc_cmd , $t )
1268
+ if defined $cc_cmd && !$suppress_cc {' cccmd' };
1276
1269
1277
1270
if ($broken_encoding {$t } && !$has_content_type ) {
1278
1271
$has_content_type = 1;
@@ -1330,6 +1323,30 @@ sub send_message {
1330
1323
$message_id = undef ;
1331
1324
}
1332
1325
1326
+ # Execute a command (e.g. $to_cmd) to get a list of email addresses
1327
+ # and return a results array
1328
+ sub recipients_cmd {
1329
+ my ($prefix , $what , $cmd , $file ) = @_ ;
1330
+
1331
+ my $sanitized_sender = sanitize_address($sender );
1332
+ my @addresses = ();
1333
+ open (F, " $cmd \Q $file \E |" )
1334
+ or die " ($prefix ) Could not execute '$cmd '" ;
1335
+ while (<F>) {
1336
+ my $address = $_ ;
1337
+ $address =~ s / ^\s *// g ;
1338
+ $address =~ s /\s *$// g ;
1339
+ $address = sanitize_address($address );
1340
+ next if ($address eq $sanitized_sender and $suppress_from );
1341
+ push @addresses , $address ;
1342
+ printf (" ($prefix ) Adding %s : %s from: '%s '\n " ,
1343
+ $what , $address , $cmd ) unless $quiet ;
1344
+ }
1345
+ close F
1346
+ or die " ($prefix ) failed to close pipe to '$cmd '" ;
1347
+ return @addresses ;
1348
+ }
1349
+
1333
1350
cleanup_compose_files();
1334
1351
1335
1352
sub cleanup_compose_files () {
0 commit comments