Program Tip

Linux 명령 줄을 사용하여 HTML 이메일을 보내는 방법

programtip 2020. 12. 10. 21:02
반응형

Linux 명령 줄을 사용하여 HTML 이메일을 보내는 방법


html 형식으로 이메일을 보내야합니다. 나는 리눅스 명령 줄과 "메일"명령 만 가지고있다.

현재 사용 :

echo "To: address@example.com" > /var/www/report.csv
echo "Subject: Subject" >> /var/www/report.csv
echo "Content-Type: text/html; charset=\"us-ascii\"" >> /var/www/report.csv

echo "<html>" >> /var/www/report.csv
mysql -u ***** -p***** -H -e "select * from users LIMIT 20" dev >> /var/www/report.csv
echo "</html>" >> /var/www/report.csv

mail -s "Built notification" address@example.com < /var/www/report.csv

하지만 내 메일 에이전트에서는 일반 / 텍스트 만 얻습니다.

대체 텍스트


이것은 나를 위해 일했습니다.

echo "<b>HTML Message goes here</b>" | mail -s "$(echo -e "This is the subject\nContent-Type: text/html")" foo@example.com

내 버전의 메일에는 포함되어 있지 않으며 -trick에 --append비해 너무 똑똑합니다 echo -e \n(단순히 \ n을 공백으로 대체). 그러나 다음이 있습니다 -a.

mail -a "Content-type: text/html" -s "Built notification" address@example.com < /var/www/report.html

tmp.html이라는 파일을 만들고 다음 줄을 넣으십시오.

<b>my bold message</b>

그런 다음이 모든 것을 명령 줄에 붙여 넣습니다 (괄호와 모두 포함).

(
  echo To: youremail@blah.com
  echo From: el@defiant.com
  echo "Content-Type: text/html; "
  echo Subject: a logfile
  echo
  cat tmp.html
) | sendmail -t

메일이 발송됩니다. 그리고 메시지는 <b>태그 대신 굵게 표시되었습니다 .

출처 :
bash 명령 "sendmail"을 사용하여 html 이메일을 보내는 방법은 무엇입니까?


문제는 이와 같이 파일을 '메일'로 리디렉션 할 때 메시지 본문에만 사용된다는 것입니다. 파일에 포함하는 모든 헤더는 대신 본문으로 이동합니다.

시험:

mail --append="Content-type: text/html" -s "Built notification" address@example.com < /var/www/report.csv

--append를 사용하면 메일에 임의의 헤더를 추가 할 수 있습니다. 여기서 콘텐츠 유형과 콘텐츠 처리를 지정해야합니다. 파일에 ToSubject헤더 를 포함 하거나 --append를 사용하여 지정할 필요가 없습니다. 이미 명령 줄에서 암시 적으로 설정하고 있기 때문입니다 (-s는 제목이고 address@example.com은 자동으로 To).


OS X (10.9.4)에서 cat작동하며 이메일이 이미 파일에있는 경우 더 쉽습니다.

cat email_template.html  | mail -s "$(echo -e "Test\nContent-Type: text/html")" karl@marx.com

heirloom-mailx를 사용하면 sendmail 프로그램을 후크 스크립트로 변경하고 헤더를 교체 한 다음 sendmail을 사용할 수 있습니다.

내가 사용하는 스크립트 ( ~/bin/sendmail-hook) :

#!/bin/bash

sed '1,/^$/{
s,^\(Content-Type: \).*$,\1text/html; charset=utf-8,g
s,^\(Content-Transfer-Encoding: \).*$,\18bit,g
}' | sendmail $@

This script changes the values in the mail header as follows:

  • Content-Type: to text/html; charset=utf-8
  • Content-Transfer-Encoding: to 8bit (not sure if this is really needed).

To send HTML email:

mail -Ssendmail='~/bin/sendmail-hook' \
    -s "Built notification" address@example.com < /var/www/report.csv

you should use "append" mode redirection >> instead of >


Very old question, however it ranked high when I googled a question about this.

Find the answer here:

Sending HTML mail using a shell script


I was struggling with similar problem (with mail) in one of my git's post_receive hooks and finally I found out, that sendmail actually works better for that kind of things, especially if you know a bit of how e-mails are constructed (and it seems like you know). I know this answer comes very late, but maybe it will be of some use to others too. I made use of heredoc operator and use of the feature, that it expands variables, so it can also run inlined scripts. Just check this out (bash script):

#!/bin/bash
recipients=(
    'john@example.com'
    'marry@not-so-an.example.com'
#   'naah@not.this.one'
);
sender='highly-automated-reporter@example.com';
subject='Oh, who really cares, seriously...';
sendmail -t <<-MAIL
    From: ${sender}
    `for r in "${recipients[@]}"; do echo "To: ${r}"; done;`
    Subject: ${subject}
    Content-Type: text/html; charset=UTF-8

    <html><head><meta charset="UTF-8"/></head>
    <body><p>Ladies and gents, here comes the report!</p>
    <pre>`mysql -u ***** -p***** -H -e "SELECT * FROM users LIMIT 20"`</pre>
    </body></html>
MAIL

Note of backticks in the MAIL part to generate some output and remember, that <<- operator strips only tabs (not spaces) from the beginning of lines, so in that case copy-paste will not work (you need to replace indentation with proper tabs). Or use << operator and make no indentation at all. Hope this will help someone. Of course you can use backticks outside o MAIL part and save the output into some variable, that you can later use in the MAIL part — matter of taste and readability. And I know, #!/bin/bash does not always work on every system.


I found a really easy solution: add to the mail command the modifier -aContent-Type:text/html.

In your case would be:

mail -aContent-Type:text/html -s "Built notification" address@example.com < /var/www/report.csv

Try with :

echo "To: address@example.com" > /var/www/report.csv
echo "Subject: Subject" >> /var/www/report.csv
echo "MIME-Version: 1.0" >> /var/www/report.csv
echo "Content-Type: text/html; charset=\"us-ascii\"" >> /var/www/report.csv
echo "Content-Disposition: inline" >> /var/www/report.csv

echo "<html>" >> /var/www/report.csv
mysql -u ***** -p***** -H -e "select * from users LIMIT 20" dev >> /var/www/report.csv
echo "</html>" >> /var/www/report.csv

mail -s "Built notification" address@example.com < /var/www/report.csv

참고URL : https://stackoverflow.com/questions/2591755/how-to-send-html-email-using-linux-command-line

반응형