سؤال

أحاول استخدام الكود التالي ، الذي لم أتمكن من اختباره بعد ، لأنني أحصل على الأخطاء التالية:

#!/usr/bin/perl
use warnings;
use strict;
use Text::Wrap;
use Mail::Box::Manager;
use HTML::Obliterate qw(extirpate_html);


open (MYFILE, '>>data.txt');
binmode(MYFILE, ':encoding(UTF-8)');


my $file = shift || $ENV{MAIL};
my $mgr = Mail::Box::Manager->new(
    access          => 'r',
);

my $folder = $mgr->open( folder => $file )
or die "$file: Unable to open: $!\n";

for my $msg ( sort { $a->timestamp <=> $b->timestamp } $folder->messages)
{
    my $to          = join( ', ', map { $_->format } $msg->to );
    my $from        = join( ', ', map { $_->format } $msg->from );
    my $date        = localtime( $msg->timestamp );
    my $subject     = $msg->subject;
    my $body        = $msg->decoded->string;


if ( $msg->isMultipart ) {
    foreach my $part ( $msg->parts ) {
        if ( $part->contentType eq 'text/html' ) {
          my $nohtml = extirpate_html( $msg );
$body =~ s/^>.*$//msg;
$Text::Wrap::columns=80;
print MYFILE wrap("", "", <<"");
\n
From: $from
To: $to
Date: $date
Subject: $subject
\n
$body
        }

else {


$body =~ s/^>.*$//msg;
$Text::Wrap::columns=80;
print MYFILE wrap("", "", <<"");
\n
From: $from
To: $to
Date: $date
Subject: $subject
\n
$body

}

}}

يبدو أن جميع الأقواس تتماشى ، لذلك أنا غير متأكد من المشكلة

syntax error at x.pl line 46, near "else"
  (Might be a runaway multi-line << string starting on line 36)
Missing right curly or square bracket at x.pl line 63, at end of line
syntax error at x.pl line 63, at EOF
Execution of x.pl aborted due to compilation errors.

تعديل:

إنه يعمل الآن ، لكن HTML غير مخطط: بدلاً من ذلك بعض رسائل البريد الإلكتروني مع أشياء مثل
>
> متداخلة طوال الوقت ، مما تسبب في أن يكون الكثير من الصفحات أكثر مما ينبغي. هل هناك طريقة أفضل للقيام بذلك

هل كانت مفيدة؟

المحلول

لذلك يبدو أن السطر 36

print MYFILE wrap("", "", <<"");

مما يعني أن بيرل سوف يلف النص التالي حتى يكون هناك مُنمث "" (لا أستخدم أي عنصر مربك مثل هذا ، أستخدم دائمًا End أو Tort_end للبساطة.)

ثم يتم العثور على هذا المنتهي على السطر 45 (الخط الفارغ) ، وهذا يعني أن الشيء التالي الذي يعالجه هو السطر 46:

else {

وهذا لا معنى له ، منذ السابق if لم يغلق بعد (السطر 44 الذي يحتوي على} قبل الموقف او المنهى "" لذلك يعامل كنص للالتفاف. يلاحظ بيرل هذا ويتفضل أن يكون هذا هو الجاني:

(Might be a runaway multi-line << string starting on line 36)

تحتاج إلى مبادلة الخطوط 44 و 45 ليكون أولاً المنهي "" (خط فارغ) ، ثم أغلق IF }. التفاف الثاني في مثالك يفعل هذا بشكل صحيح.

نصائح أخرى

أجب على سؤالك المعدل:

بدلاً من توضيح جسم الرسالة ، تقوم بتوسيع الرسالة بأكملها بدلاً من ذلك. ثم لا تستخدمه في أي مكان.

my $nohtml = extirpate_html( $msg );
$body =~ s/^>.*$//msg;
$Text::Wrap::columns=80;
print MYFILE wrap("", "", <<"");
\n
From: $from
To: $to
Date: $date
Subject: $subject
\n
$body

ربما تحتاج إلى تغييره إلى:

my $nohtml = extirpate_html( $body );
$nohtml =~ s/^>.*$//msg;

ثم تطبيق $nohtml كجسم الرسالة للالتفاف.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top