@@ -70,6 +70,7 @@ sub usage {
70
70
71
71
Automating:
72
72
--identity <str> * Use the sendemail.<id> options.
73
+ --to-cmd <str> * Email To: via `<str> \$ patch_path`
73
74
--cc-cmd <str> * Email Cc: via `<str> \$ patch_path`
74
75
--suppress-cc <str> * author, self, sob, cc, cccmd, body, bodycc, all.
75
76
--[no-]signed-off-by-cc * Send to Signed-off-by: addresses. Default on.
@@ -187,7 +188,8 @@ sub do_edit {
187
188
}
188
189
189
190
# Variables with corresponding config settings
190
- my ($thread , $chain_reply_to , $suppress_from , $signed_off_by_cc , $cc_cmd );
191
+ my ($thread , $chain_reply_to , $suppress_from , $signed_off_by_cc );
192
+ my ($to_cmd , $cc_cmd );
191
193
my ($smtp_server , $smtp_server_port , $smtp_authuser , $smtp_encryption );
192
194
my ($identity , $aliasfiletype , @alias_files , @smtp_host_parts , $smtp_domain );
193
195
my ($validate , $confirm );
@@ -214,6 +216,7 @@ sub do_edit {
214
216
" smtppass" => \$smtp_authpass ,
215
217
" smtpdomain" => \$smtp_domain ,
216
218
" to" => \@to ,
219
+ " tocmd" => \$to_cmd ,
217
220
" cc" => \@initial_cc ,
218
221
" cccmd" => \$cc_cmd ,
219
222
" aliasfiletype" => \$aliasfiletype ,
@@ -272,6 +275,7 @@ sub signal_handler {
272
275
" in-reply-to=s" => \$initial_reply_to ,
273
276
" subject=s" => \$initial_subject ,
274
277
" to=s" => \@to ,
278
+ " to-cmd=s" => \$to_cmd ,
275
279
" no-to" => \$no_to ,
276
280
" cc=s" => \@initial_cc ,
277
281
" no-cc" => \$no_cc ,
711
715
$prompting ++;
712
716
}
713
717
714
- if (!@to ) {
718
+ if (!@to && ! defined $to_cmd ) {
715
719
my $to = ask(" Who should the emails be sent to? " );
716
720
push @to , parse_address_line($to ) if defined $to ; # sanitized/validated later
717
721
$prompting ++;
@@ -1238,21 +1242,10 @@ sub send_message {
1238
1242
}
1239
1243
close F;
1240
1244
1241
- if (defined $cc_cmd && !$suppress_cc {' cccmd' }) {
1242
- open (F, " $cc_cmd \Q $t \E |" )
1243
- or die " (cc-cmd) Could not execute '$cc_cmd '" ;
1244
- while (<F>) {
1245
- my $c = $_ ;
1246
- $c =~ s / ^\s *// g ;
1247
- $c =~ s /\n $// g ;
1248
- next if ($c eq $sender and $suppress_from );
1249
- push @cc , $c ;
1250
- printf (" (cc-cmd) Adding cc: %s from: '%s '\n " ,
1251
- $c , $cc_cmd ) unless $quiet ;
1252
- }
1253
- close F
1254
- or die " (cc-cmd) failed to close pipe to '$cc_cmd '" ;
1255
- }
1245
+ push @to , recipients_cmd(" to-cmd" , " to" , $to_cmd , $t )
1246
+ if defined $to_cmd ;
1247
+ push @cc , recipients_cmd(" cc-cmd" , " cc" , $cc_cmd , $t )
1248
+ if defined $cc_cmd && !$suppress_cc {' cccmd' };
1256
1249
1257
1250
if ($broken_encoding {$t } && !$has_content_type ) {
1258
1251
$has_content_type = 1;
@@ -1310,6 +1303,30 @@ sub send_message {
1310
1303
$message_id = undef ;
1311
1304
}
1312
1305
1306
+ # Execute a command (e.g. $to_cmd) to get a list of email addresses
1307
+ # and return a results array
1308
+ sub recipients_cmd {
1309
+ my ($prefix , $what , $cmd , $file ) = @_ ;
1310
+
1311
+ my $sanitized_sender = sanitize_address($sender );
1312
+ my @addresses = ();
1313
+ open (F, " $cmd \Q $file \E |" )
1314
+ or die " ($prefix ) Could not execute '$cmd '" ;
1315
+ while (<F>) {
1316
+ my $address = $_ ;
1317
+ $address =~ s / ^\s *// g ;
1318
+ $address =~ s /\s *$// g ;
1319
+ $address = sanitize_address($address );
1320
+ next if ($address eq $sanitized_sender and $suppress_from );
1321
+ push @addresses , $address ;
1322
+ printf (" ($prefix ) Adding %s : %s from: '%s '\n " ,
1323
+ $what , $address , $cmd ) unless $quiet ;
1324
+ }
1325
+ close F
1326
+ or die " ($prefix ) failed to close pipe to '$cmd '" ;
1327
+ return @addresses ;
1328
+ }
1329
+
1313
1330
cleanup_compose_files();
1314
1331
1315
1332
sub cleanup_compose_files () {
0 commit comments