파일 내용을 이메일로 보내고 파일의 시작과 끝 부분에 HTML 주석을 추가해야 합니다. 이 목적으로 "sendmail"을 사용했지만 이메일을 받았을 때 Outlook에서 문제를 일으키는 줄바꿈이 표시되지 않습니다. "mail" 명령을 사용해 보았으나 HTML 주석을 추가하는 방법을 잘 모르겠습니다. 이것은 내 조각입니다.
open(my $sendmail,"|/usr/sbin/sendmail -t");
print $sendmail "From: linux\@test.com\n";
print $sendmail "To: kris\@test.com\n";
print $sendmail "Content-Type: text/html\n";
print $sendmail "Subject: My Test\n";
print $sendmail "\n";
my $Header = << 'END';
<html>
<head>
<h3><font color="red">For test</font></h3>
</head>
<body>
<h3><font color="red">For test</font></h3>
<br/>
</body>
</html>
END
print $sendmail $Header;
print $sendmail "<br>Ran for time: \n";
my $alert3 = `/bin/cat /home/kris/test.txt`;
print $sendmail $alert3;
close($sendmail);
이메일을 보낼 때는 잘 작동하지만 "alert3"의 파일 내용은 한 줄인 반면, cat을 사용하면 여러 줄이 됩니다. 또한 성공하지 못한 채 Outlook에서 줄 바꿈 옵션을 변경했습니다. 이러한 상황을 처리하는 더 좋은 방법이 있습니까?
답변1
|/usr/sbin/sendmail -t
.
메시지를 한 줄로 작성하면 메시지가 잘리는 등의 문제가 발생합니다. 또한 오류 검사 및 기타 문제가 눈에 띄게 부족합니다( open
실패할 수 있으며 분기는 cat
파일 내용을 읽는 데 가장 비용이 많이 들고 복잡하며 오류가 발생하기 쉬운 방법입니다).
현대 Perl의 경우 다음을 사용할 수 있습니다.이메일::필러이는 다음을 통해 유효한 MIME 부분을 올바르게 구성하는 작업을 크게 단순화합니다.이메일::MIME. 설치해보자...
$ cpanm Email::Stuffer
...
12 distributions installed
$
나는 가지고있다애플리케이션::cpanminus그리고로컬::lib설정, 필요한 경우 공급업체 패키지와 같이 모듈을 처리하는 다른 방법이 있습니다.판지 상자,등.
이제 보내는 코드는 다음과 같습니다.
#!/usr/bin/env perl
use strict;
use warnings;
use Email::Stuffer;
my $the_html = <<'END';
<html><body><h3><font color="red">test</font></h3><br/></body></html>
END
Email::Stuffer
->from('[email protected]')
->to('[email protected]')
->subject('test test')
->html_body($the_html)
->attach_file('/home/kris/test.txt')
->send;
콘텐츠가 /home/kris/test.txt
실제로 다른 파일로 추가되지 않고 HTML 중간에 혼합되어야 하는 경우 HTML 관련 코드는 다음과 같을 수 있습니다(예, 더 많은 모듈...).
use Email::Stuffer;
use File::Slurper 'read_text';
my $the_html = <<'HEAD';
<html><body><h3><font color="red">test</font></h3><br/>
HEAD
$the_html .= read_text('/home/kris/test.txt');
$the_html .= <<'TAIL';
</body></html>
TAIL
Email::Stuffer
->from('[email protected]')
->to('[email protected]')
->subject('test test')
->html_body($the_html)
->send;
그러나 단순히 문자열을 연결하고 HTML 작업을 수행하는 것 이상의 작업을 수행하려는 경우 파일 및 기타 기능을 포함할 수 있는 HTML 템플릿 모듈이 있습니다.
답변2
스크립트가 개행 문자를 보내지 않는 것이 아니라 Outlook에서 개행 문자를 무시하는 렌더링이 될 수 있지만 여기에서는 Outlook의 동작이 실제로 잘못될 수 있다고 생각합니다. html은 개행 문자를 무시하고 콘텐츠를 html로 표시했습니다. 올바른 것을 사용하세요여러 부분으로 구성된 메일 메시지를 위한 다목적 인터넷 메일 확장 태그. 다음은 링크된 페이지의 예입니다.
매우 간단한 예로 다음 다중 부분 메시지는 두 부분으로 구성됩니다. 둘 다 일반 텍스트로, 그 중 하나는 명시적으로 입력되고 다른 부분은 암시적으로 입력됩니다.
From: Nathaniel Borenstein <[email protected]> To: Ned Freed <[email protected]> Subject: Sample message MIME-Version: 1.0 Content-type: multipart/mixed; boundary="simple boundary" This is the preamble. It is to be ignored, though it is a handy place for mail composers to include an explanatory note to non-MIME compliant readers. --simple boundary This is implicitly typed plain ASCII text. It does NOT end with a linebreak. --simple boundary Content-type: text/plain; charset=us-ascii This is explicitly typed plain ASCII text. It DOES end with a linebreak. --simple boundary-- This is the epilogue. It is also to be ignored.
다른 멀티파트 엔터티의 본문 부분 내에서 멀티파트 콘텐츠 유형의 사용을 명시적으로 허용합니다. 이 경우에는 중첩된 각 다중 부분 엔터티가 서로 다른 경계 구분 기호를 사용해야 한다는 점에 주의해야 합니다. 중첩된 다중 부분 엔터티의 예는 부록 C를 참조하세요.
따라서 html 부분을 text/html 부분에 넣고 일반 텍스트를 text/plain 부분에 넣으세요.