On 2021-01-09 22:50, Brian Inglis wrote:
Please apply the attached patch to avoid my further spamming of the announce list again, as my ISP SMTP server requires a valid SMTP Hello domain, does not accept Unix Mbox 'From '  initial header line, and various other requirements to work reliably for sending, and receiving at sourceware.

The changes were based on git-send-email SMTP exchanges, which have never been an issue.
They main parts are implemented behind flag variables
SMTP_HELLO_DOMAIN (default 1 - fixes my issue and should work generally) and SMTP_MBOX_FROM (default 0 - fixes my issue and should work generally), which could be supported in cygport.conf, but I have not yet made doc patches, as I would like feedback if there are any issues with the changes or flag variable names, being a plain, not Perl, scripter ;^>

Other tweaks were required to make the headers more SMTP compliant and to avoid issues with picky (configuration of?) ISP SMTP servers.

Resend with current patch.

--
Take care. Thanks, Brian Inglis, Calgary, Alberta, Canada

This email may be disturbing to some readers as it contains
too much technical detail. Reader discretion is advised.
[Data in binary units and prefixes, physical quantities in SI.]
--- a/cygport/lib/pkg_upload.cygpart    2020-07-10 17:02:29.781319400 -0600
+++ b/cygport/lib/pkg_upload.cygpart    2020-10-26 02:21:08.690020000 -0600
@@ -168,16 +168,21 @@ EOF
        echo "Upload complete."
 }
 
-
 __pkg_announce() {
        local msg=$(mktemp -t cygwin-announce-${PF}.XXXXXX)
        local msgat=$(date +@%s)
        local -i n=0
+       local smtp_mbox_from=${SMTP_MBOX_FROM:-0}
+
+       if [ $smtp_mbox_from = 1 ]
+       then
+           echo "From cygwin-announce-${PF} $(date '+%a %b %d %H:%M:%S %Y' 
--date=${msgat})" >> ${msg}
+       fi
 
-       cat > ${msg} <<_EOF
-From cygwin-announce-${PF} $(date '+%a %b %d %H:%M:%S %Y' --date=${msgat})
+       cat >> ${msg} <<_EOF
 From: ${SMTP_SENDER}
-To: [email protected]
+To: <[email protected]>
+Reply-To: <[email protected]>
 Date: $(date -R --date=${msgat})
 Message-Id: <$(date "+%Y%m%d%H%M%S.$$" --date=${msgat})-1-$(echo 
${SMTP_SENDER} | sed 's|.*<\(.*\)>.*|\1|')>
 Subject: ${NAME} ${PVR}
@@ -197,7 +202,7 @@ _EOF
 ${DESCRIPTION}
 _EOF
 
-       ${EDITOR:-vi} $msg || error "Editor exited abormally, aborting 
annoucement"
+       ${VISUAL:-${EDITOR:-vi}} $msg || error "Editor exited abormally, 
aborting announcement"
 
 # FQDN from git send-email
 # Returns the local Fully Qualified Domain Name (FQDN) if available.
@@ -215,8 +220,12 @@ _EOF
 #
 # This maildomain*() code is based on ideas in Perl library Test::Reporter
 # /usr/share/perl5/Test/Reporter/Mail/Util.pm ==> sub _maildomain ()
-
        perl <(cat <<EOF
+use strict;
+use MIME::Parser;
+use Net::SMTP;
+use Net::Domain qw(hostdomain hostfqdn domainname);
+
 sub valid_fqdn {
        my \$domain = shift;
        return defined \$domain && !(\$^O eq 'darwin' && \$domain =~ 
/\.local\$/) && \$domain =~ /\./;
@@ -224,13 +233,13 @@ sub valid_fqdn {
 sub maildomain_net {
     use Net::Domain ();
        my \$maildomain;
-       my \$domain = Net::Domain::domainname();
+       my \$domain = domainname();
        \$maildomain = \$domain if valid_fqdn(\$domain);
        return \$maildomain;
 }
 sub maildomain_mta {
        my \$maildomain;
-       for my \$host (qw(mailhost localhost)) {
+       for my \$host (qw(mailhost localhost mail smtp)) {
                my \$smtp = Net::SMTP->new(\$host);
                if (defined \$smtp) {
                        my \$domain = \$smtp->domain;
@@ -245,27 +254,29 @@ sub maildomain {
        return maildomain_net() || maildomain_mta() || 'localhost.localdomain';
 }
 
-use strict;
-use MIME::Parser;
-use Net::SMTP;
-
 my \$smtp_server = "${SMTP_SERVER:-localhost}";
 my \$smtp_encryption = "${SMTP_ENCRYPTION:-none}";
 my \$smtp_user${SMTP_USER+ = '$SMTP_USER'};
 my \$smtp_pass${SMTP_PASS+ = '$SMTP_PASS'};
+my \$smtp_hello_domain = "${SMTP_HELLO_DOMAIN:-1}";
+my \$hello = 'localhost.localdomain';
+# get FQDN and add Hello below
+\$hello ||= hostfqdn() || hostdomain() || maildomain() if \$smtp_hello_domain;
 
 my \$parser = new MIME::Parser;
 \$parser->output_to_core(1);
 my \$entity = \$parser->parse_open("$msg");
+if (\$smtp_hello_domain) {
+       \$hello = \$1 if (\$entity->head->get('From') =~ m/<?[^@>]+@([^>]+)>?/);
+}
 
 print "Sending announcement of ${NAME}-${PVR} via \$smtp_server\n";
 
-my \$smtp_domain ||= maildomain();  # get FQDN and add Hello below
 my \$smtp = new Net::SMTP(\$smtp_server,
-                         Hello => \$smtp_domain,
                          ${SMTP_SERVER_PORT+Port => ${SMTP_SERVER_PORT},}
+                         Hello => \$hello,
                          SSL => \$smtp_encryption eq 'ssl')
-        or die "No mailserver at ".\$smtp_server;
+        or die "No mailserver at ".\$smtp_server.":".\$@;
 if (\$smtp_encryption eq 'tls') {
        require Net::SMTP::SSL;
        \$smtp->command('STARTTLS');
@@ -273,7 +284,7 @@ if (\$smtp_encryption eq 'tls') {
        \$smtp->code == 220 or die "$server does not support STARTTLS";
        \$smtp = Net::SMTP::SSL->start_SSL(\$smtp) or die "STARTTLS failed";
        # Send EHLO again to receive fresh supported commands
-       \$smtp->hello(\$smtp_domain);
+       \$smtp->hello(\$hello);
 }
 if (defined \$smtp_user) {
        use Authen::SASL qw(Perl);
@@ -282,6 +293,8 @@ if (defined \$smtp_user) {
 }
 \$smtp->mail(\$entity->head->get('From')) or die "unable to set sender";
 \$smtp->to(\$entity->head->get('To')) or die "unable to address message";
+\$smtp->cc(\$entity->head->get('Cc')) if \$entity->head->get('Cc');
+\$smtp->bcc(\$entity->head->get('Bcc')) if \$entity->head->get('Bcc');
 \$smtp->data() or die "unable to start data send";
 \$smtp->datasend(\$entity->as_string()) or die "Message send failed";
 \$smtp->dataend() or die "Message end failed";

Reply via email to