使用 Perl 问题将电子邮件转发到 Epson 打印机 "Email Print"

Forwarding Email to Epson Printer "Email Print" with Perl Issue

我目前正在使用 Cpanel 设置一个电子邮件转发,它通过 CPanel 电子邮件转发中的一个功能“管道到程序”。在这个 perl 脚本中,我获取 headers 并将它们替换为 Epson 电子邮件打印地址,因为 Epson 打印机不喜欢直接转发。但是,我遇到的问题是一次发送给多个用户会导致错误,而且它不喜欢超过 1 个收件人。

我的代码如下:

#!/usr/bin/perl
use strict;

# Real email address for the printer
my $email = 'example@domain.com';

my $sm;
open($sm, "|/usr/sbin/sendmail -t");

my $in_header = 1;

while (my $line = <STDIN>) {
        chomp $line;

        # Empty line while in headers means end of headers
        if ($in_header && $line eq '') {
                $in_header = 0;
        }

        # Replace To: field if we're in headers
        if ($in_header && $line =~ m/^To: /) {
                $line = "To: $email";
        }

        # Pass through to sendmail
        print $sm "$line\n";
}

close($sm);

我感觉我的问题的根源来自我代码中的这一行:

# Replace To: field if we're in headers
if ($in_header && $line =~ m/^To: /) {
    $line = "To: $email";
}

我不得不承认,我在网上找到了这个代码片段,我完全不熟悉 Perl,以便找到一个可行的解决方案,以便能够毫无问题地转发到多封电子邮件。任何关于我可以从哪里开始的指示,即使完整的解决方案不清楚,也会非常有帮助。

资源:

https://www.cravingtech.com/how-to-setup-epson-email-print-using-your-own-domain-name.html

#!/usr/bin/perl
use strict;

my $email = 'example@domain.com';

my $sm;
open($sm, "|/usr/sbin/sendmail -t");

my $in_header = 1;
my $in_to = 0;

while (my $line = <STDIN>) {
    chomp $line;
    # Empty line while in headers means end of headers
    if ($in_header && $line eq '') {
            $in_header = 0;
    }
    # Email Header
    if ($in_header){
        if($line =~ m/^To: /) {
            $in_to = 1;
            $line = "To: $email";
        } elsif($in_to) {
            if($line =~ /:/){
                $in_to = 0;
            }else{
                next;
            }
        }   
    }   
    print $sm "$line\n";
}
close($sm);

经过数小时的反复试验,这最终成为我的解决方案。

只是在这里发布这个以防有人遇到我的小众问题哈哈。

谢谢。