Пересылка электронной почты на принтер Epson «Email Print» с ошибкой Perl - PullRequest
0 голосов
/ 05 августа 2020

В настоящее время я использую Cpanel для настройки пересылки электронной почты, которая проходит через функцию пересылки электронной почты CPanel «Pipe to Program». В этом сценарии perl я беру заголовки и заменяю их адресом электронной почты Epson для печати, поскольку принтеры Epson не любят прямую пересылку. Однако у меня возникла проблема, когда отправка сразу нескольким пользователям вызывает ошибки, и ей не нравится более одного получателя.

Мой код ниже:

#!/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);

У меня такое чувство root моих проблем происходит из этой строки в моем коде:

# 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

1 Ответ

1 голос
/ 15 августа 2020
#!/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);

Это оказалось моим решением после многих часов проб и ошибок.

Просто разместите это здесь на случай, если кто-то столкнется с моей очень нишевой проблемой, лол.

Спасибо.

...