Linux 서버에서 매일 밤마다 실행되는 스크립트를 작성했습니다.mysqldump
내 MySQL 데이터베이스 각각을 .sql 파일로 백업하고 압축 된 .tar 파일로 패키지화합니다. 달성하고자하는 다음 단계는 이메일을 통해 tar 파일을 원격 전자 메일 서버로 보내서 보관하는 것입니다. 본문의 원시 스크립트에 백업 텍스트 파일을 파이핑하여 이메일을 보낼 수있었습니다.mailx
이렇게 :
$ cat mysqldbbackup.sql | mailx backup@email.com
cat
백업 파일의 텍스트를 에코합니다.mailx
수신자의 전자 메일 주소가 인수로 전달 된 프로그램.
이것이 내가 원하는 것을 성취하는 동안, 나는 그것이 한 걸음 나아질 수 있다고 생각한다.쉘 스크립트 나 다른 방법을 사용하여 압축 된 .tar 파일을 보내는 전자 메일 메시지로 보낼 수있는 방법이 있습니까?부착?이것은 헤더 데이터를 포함하고 종종 워드 랩핑 이슈 등을 포함하는 매우 긴 이메일 메시지를 처리해야하는 번거 로움이 될 것입니다.
똥개는 나를 위해 일하지 않았다. 이메일 주소가 attachemnt의 일부라고 생각했습니다. 할 일 :
echo "This is the message body" | mutt -a "/path/to/file.to.attach" -s "subject of message" -- recipient@domain.com
또는 실패한 mutt :
gzip -c mysqldbbackup.sql | uuencode mysqldbbackup.sql.gz | mail -s "MySQL DB" backup@email.com
보고있는 것에서man mailx
, mailx 프로그램에는 파일 첨부 옵션이 없습니다. mutt와 같은 다른 프로그램을 사용할 수 있습니다.
echo "This is the message body" | mutt -a file.to.attach -s "subject of message" recipient@domain.com
mutt의 명령 행 옵션은 다음과 같이 표시 할 수 있습니다.mutt -h
.
mutt
나에게 나노 편집기를 열어 메일을 보낸다. - Jonas--
. - Alexander Bird
리눅스 버전에 따라 우편이라고 부를 수 있습니다. 위의 @David를 인용하십시오.
mail -s "Backup" -a mysqldbbackup.sql backup@email.com < message.txt
또는 :
cat message.txt | mail -s "Backup" -a mysqldbbackup.sql backup@email.com
-a, --append=HEADER: VALUE append given header to the message being sent
- exhumamutt
명령이 아니라mail
. 또한 다른 사람들이 지적했듯이, mutt은 이제--
인수를 주소 앞에 붙이십시오. 그리고 나는 그 표본을 볼 수 있습니다.-a
~의 옵션mail
않습니다 - 잠시 혼란 스러워요.) - nealmcb-a, --append=HEADER: VALUE append given header to the message being sent
-A, --attach=FILE attach FILE
- Victor Perov
나는 mpack을 사용한다.
mpack -s subject file user@example.com
불행히도 mpack은 '-'을 stdin의 별칭으로 인식하지 않습니다. 하지만 다음 작업은 (셸) 별칭이나 스크립트로 쉽게 묶을 수 있습니다.
mpack -s subject /dev/stdin loser@example.com < file
mpack -s subject /dev/stdin loser@example.com <(stdout_generating_program)
- thomasa88
이 시나리오를 위해 만들어진 SendEmail을 사용합니다. 우분투 용 패키지이므로 사용 가능하다고 가정합니다.
sendemail -f sender@some.where -t receiver@some.place -m "Here are your files!" -a file1.jpg file2.zip
http://caspian.dotconf.net/menu/Software/SendEmail/
sendemail
과sendEmail
...에서/usr/bin/
. - Fredrik WendtSendEmail
- Vitaly Zdanevichsendemail -f mandatory@email.com-t to@some.one -m "Here are your files!" -a file1.jpg file2.zip
- Sailendra Pinupolu
echo 'These are contents of my mail' | mailx -s 'This is my email subject' -a /path/to/attachment_file.log email_id@example.com
mailx
제대로 표준화되지 않았습니다. 그것을 권장하는 답변은이주의 사항을 지적해야합니다. 공통으로 사용되는 호환되지 않는 변형이 3 개 이상 있습니다. - tripleee
필자는 Solaris에서 ksh에 대한이 함수를 작성했습니다 (Perl에서 base64 인코딩을 사용함).
#usage: email_attachment to cc subject body attachment_filename
email_attachment() {
to="$1"
cc="$2"
subject="$3"
body="$4"
filename="${5:-''}"
boundary="_====_blah_====_$(date +%Y%m%d%H%M%S)_====_"
{
print -- "To: $to"
print -- "Cc: $cc"
print -- "Subject: $subject"
print -- "Content-Type: multipart/mixed; boundary=\"$boundary\""
print -- "Mime-Version: 1.0"
print -- ""
print -- "This is a multi-part message in MIME format."
print -- ""
print -- "--$boundary"
print -- "Content-Type: text/plain; charset=ISO-8859-1"
print -- ""
print -- "$body"
print -- ""
if [[ -n "$filename" && -f "$filename" && -r "$filename" ]]; then
print -- "--$boundary"
print -- "Content-Transfer-Encoding: base64"
print -- "Content-Type: application/octet-stream; name=$filename"
print -- "Content-Disposition: attachment; filename=$filename"
print -- ""
print -- "$(perl -MMIME::Base64 -e 'open F, shift; @lines=<F>; close F; print MIME::Base64::encode(join(q{}, @lines))' $filename)"
print -- ""
fi
print -- "--${boundary}--"
} | /usr/lib/sendmail -oi -t
}
base64
인코딩을위한 perl 대신에 명령 - MestreLion
(
/usr/bin/uuencode attachfile.txt myattachedfilename.txt;
/usr/bin/echo "Body of text"
) | mailx -s 'Subject' youremail@gmail.com
아래는 위의 명령과 같은 명령입니다.
( /usr/bin/uuencode /home/el/attachfile.txt myattachedfilename.txt; /usr/bin/echo "Body of text" ) | mailx -s 'Subject' youremail@gmail.com
파일이 있는지 확인하십시오./home/el/attachfile.txt
이 내용으로 정의 :
<html><body>
Government discriminates against programmers with cruel/unusual 35 year prison
sentences for making the world's information free, while bankers that pilfer
trillions in citizens assets through systematic inflation get the nod and
walk free among us.
</body></html>
uuencode가 없으면 다음을 읽으십시오 :https://unix.stackexchange.com/questions/16277/how-do-i-get-uuencode-to-work
ksh가 설치되어 있는지 확인하십시오.yum info ksh
sendmail을 설치하고 구성했는지 확인하십시오.
uuencode가 설치되어 있고 사용 가능한지 확인하십시오.https://unix.stackexchange.com/questions/16277/how-do-i-get-uuencode-to-work
새 파일 만들기test.sh
홈 디렉토리에 넣으십시오 :/home/el
다음 코드를test.sh
:
#!/usr/bin/ksh
export MAILFROM="el@defiant.com"
export MAILTO="youremail@gmail.com"
export SUBJECT="Test PDF for Email"
export BODY="/home/el/email_body.htm"
export ATTACH="/home/el/pdf-test.pdf"
export MAILPART=`uuidgen` ##Generates Unique ID
export MAILPART_BODY=`uuidgen` ##Generates Unique ID
(
echo "From: $MAILFROM"
echo "To: $MAILTO"
echo "Subject: $SUBJECT"
echo "MIME-Version: 1.0"
echo "Content-Type: multipart/mixed; boundary=\"$MAILPART\""
echo ""
echo "--$MAILPART"
echo "Content-Type: multipart/alternative; boundary=\"$MAILPART_BODY\""
echo ""
echo "--$MAILPART_BODY"
echo "Content-Type: text/plain; charset=ISO-8859-1"
echo "You need to enable HTML option for email"
echo "--$MAILPART_BODY"
echo "Content-Type: text/html; charset=ISO-8859-1"
echo "Content-Disposition: inline"
cat $BODY
echo "--$MAILPART_BODY--"
echo "--$MAILPART"
echo 'Content-Type: application/pdf; name="'$(basename $ATTACH)'"'
echo "Content-Transfer-Encoding: uuencode"
echo 'Content-Disposition: attachment; filename="'$(basename $ATTACH)'"'
echo ""
uuencode $ATTACH $(basename $ATTACH)
echo "--$MAILPART--"
) | /usr/sbin/sendmail $MAILTO
상단의 내보내기 변수 변경test.sh
주소와 파일 이름을 반영해야합니다.
테스트 용 PDF 문서를 다운로드하여 입력하십시오./home/el
pdf-test.pdf
/home/el/email_body.htm이라는 파일을 만들고이 줄을 그 안에 넣으십시오.
<html><body><b>this is some bold text</b></body></html>
pdf 파일에 충분한 755 권한이 있는지 확인하십시오.
스크립트 실행./test.sh
전자 메일받은 편지함을 확인하십시오. 텍스트는 HTML 형식이어야하며 pdf 파일은 자동으로 이진 파일로 해석됩니다. 하루에 15 번 이상이 기능을 사용하지 않도록 조심하십시오. 전자 메일을 직접 발송하더라도 Gmail의 스팸 필터는 도메인을 차단할 수있는 옵션을 제공하지 않고 도메인을 블랙리스트에 올릴 수 있습니다. 그리고 당신은 이것이 더 이상 작동하지 않는다는 것을 알게 될 것입니다, 또는 그것은 단지 첨부 파일을 통해서만 가능합니다, 또는 전자 메일은 전혀 통하지 않습니다. 이것에 대해 많은 테스트를해야한다면, 며칠 동안 스팸을 퍼트 리면 스팸 발송자로 분류 될 것이며이 기능은 더 이상 작동하지 않을 것입니다.
여기에 몇 가지 해답이 있습니다.mail
또는mailx
그래서 이것은 이것들을 문맥에서 해석하는데 도움이되는 배경입니다.
유닉스의 기원mail
벨 연구소 Unix 및 무역의 초기 역사의 안개로 돌아 가라. (1969?), 우리는 여기에서 그 전체 족보에 들어갈 수는 없을 것입니다. 코드를 상속하거나 재 구현 (또는 재 구현으로부터 코드를 상속받는)하는 많은 프로그램이 있다고 말하는 것은 충분하다.mail
"the"로 모호하지 않게 식별 될 수있는 단일 코드베이스가 존재하지 않는다는 것을 의미합니다.mail
.
그러나, 그 위치에 경쟁자의 한개는 "버클리 우편물"확실히이었다 원래 불렸다Mail
2BSD에서 대문자 M (1978); 그러나 3BSD (1979)에서는 소문자mail
명령을 사용하여 새로운 혼란을 가져옵니다. SVR3 (1986)에는mailx
. 그만큼x
아마도 독특하고 뚜렷하게하기 위해 추가되었을 것입니다; 그러나 이것 역시 복사되고, 재 구현되고, 절단되어 결정적인 하나의 개별 버전이 존재하지 않습니다.
다시 오늘,사실상전자 메일을 통한 바이너리 전송 표준uuencode
. 여전히 존재하지만 많은 유용성 문제가 있습니다. 가능하다면 1980 년대 후반과 통신 할 수 있도록 특별히 노력하지 않는 한 MIME 첨부 파일을 보내야합니다.
몸짓 광대극1990 년대 초반 이메일의 몇 가지 문제를 해결하기 위해 도입되었습니다. 영어의 하위 집합에 실제로 적합한 단일 문자 세트의 일반 텍스트 이외의 다양한 유형의 콘텐츠 지원 (하와이 말) . 이것은 멀티 파트 메시지, 국제화, 풍부한 콘텐츠 형식 등에 대한 지원을 도입하고 1990 년대에 빠르게 견인력을 얻었습니다.
(그만큼법정 상속 동산mail
/mailx
이력 노트이것을 작성할 때 가장 도움이되었고, 그런 종류의 일을하는 경우 확실히 읽을만한 가치가 있습니다.)
데비안은 2018 년 현재 세 개의 패키지를 가지고 있습니다.mail
또는mailx
명령. (다음을 검색 할 수 있습니다.Provides: mailx
.)
debian$ aptitude search ~Pmailx
i bsd-mailx - simple mail user agent
p heirloom-mailx - feature-rich BSD mail(1)
p mailutils - GNU mailutils utilities for handling mail
(필자는 권장 사항으로 데비안을 선택하지는 않으며, 내가 사용하고있는 것이므로 익숙하다. 각각의 패키지 이름을 참조하여 다양한 대안을 모호하지 않게 구별 할 수있는 방법을 제공한다. 우분투는 이러한 패키지를 얻습니다.)
bsd-mailx
비교적 간단하다.mailx
어느 것이아니MIME 첨부 파일 전송을 지원하는 것으로 보입니다. 자사의매뉴얼 페이지이것이 기본적으로 MacOS를 포함한 * BSD 시스템에서 찾을 것으로 예상되는 것임을 유의하십시오.heirloom-mailx
지금 불리고있다.s-nail
과~하다MIME 첨부 파일 전송 지원-a
. 자사의매뉴얼 페이지그리고 더 일반적으로가보 프로젝트mailutils
일명GNU Mailutils~을 포함한다.mail
/mailx
호환성 래퍼어느~하다MIME 첨부 파일 전송 지원-A
이러한 문제로 인해 코드를 이식성이 필요하고 다소 복잡한 패키지에 의존 할 수있는 경우 MIME 첨부 파일을 이식 가능하게 보내는 간단한 방법은 다음과 같습니다.용도mutt
.
또 다른 대안 -가장 나쁜(SMTP 용 Swiss Army Knife).
swaks -tls \
--to ${MAIL_TO} \
--from ${MAIL_FROM} \
--server ${MAIL_SERVER} \
--auth LOGIN \
--auth-user ${MAIL_USER} \
--auth-password ${MAIL_PASSWORD} \
--header "Subject: $MAIL_SUBJECT" \
--header "Content-Type: text/html; charset=UTF-8" \
--body "$MESSAGE" \
--attach mysqldbbackup.sql
메타 메타 도구가 메타 센드 있습니다.
metasend -f mysqlbackup.sql.gz -t backup@email.com -s Backup -m application/x-gzip -b
나는 사용했다.
echo "Start of Body" && uuencode log.cfg readme.txt | mail -s "subject" "a@b.c"
이게 잘 됐어 ....
mailx
~을 가지고있다.-a
옵션을 지금 첨부 파일.
mailx
해야 할 것. 나는 두 가지 구현이 있다고 믿는다. 하나에-a
첨부 파일 용이고 다른 쪽은 헤더 용입니다. - exhuma
나는 보통 RHEL에서 메일 명령 만 사용합니다. mailx 시도하고 꽤 효율적입니다.
mailx -s "Sending Files" -a First_LocalConfig.conf -a
Second_LocalConfig.conf Recipient@myemail.com
This is the content of my msg.
.
나를위한 가장 짧은 길은
file=filename_or_filepath;uuencode $file $file|mail -s "optional subject" email_address
그래서 귀하의 예를 들어 그것은있을거야
file=your_sql.log;gzip -c $file;uuencode ${file}.gz ${file}|mail -s "file with magnets" ph.gachoud@gmail.com
좋은 부분은 내가 그것을 회상 할 수 있다는 것이다.Ctrl + r다른 파일을 보내려면 ...
원본 컴퓨터에서
mysqldump --defaults-extra-file=sql.cnf database | gzip | base64 | mail me@myemail.com
목적지 컴퓨터에서. 받은 메일 본문을 다음과 같이 저장하십시오.db.sql.gz.b64; 그때..
base64 -D -i db.sql.gz.b64 | gzip -d | mysql --defaults-extra-file=sql.cnf
mailx 명령 사용
echo "Message Body Here" | mailx -s "Subject Here" -a file_name user@example.com
센드 메일 사용하기
#!/bin/ksh
fileToAttach=data.txt
`(echo "To: user@company.com"
echo "Cc: user@company.com"
echo "From: Application"
echo "Subject: your subject"
echo your body
uuencode $fileToAttach $fileToAttach
)| eval /usr/sbin/sendmail -t `;
내 2 센트를 추가하기 위해 필자 만의 PHP 스크립트를 작성했습니다.
http://php.net/manual/en/function.mail.php
해당 페이지의 예제에서 첨부 파일을 수행하는 데는 여러 가지 방법이 있습니다.
이메일을 보내는 방법이 아니지만 온라인 Git 서버 (예 : Bitbucket 또는 유사한 서비스)를 사용하여 이메일을 보낼 수 있습니다.
이렇게하면git push
명령 및 모든 버전은 압축되고 체계적인 방식으로 저장됩니다.
이것은 내가 CentOS에서 하나의 커다란 로그 파일을 가지고 수행하는 방법이다.
MAIL="`whereis mail | awk '{print $2}'`"
WHOAMI="`whoami`"
HOSTNAME="`hostname`"
EMAIL"your@email.address"
LOGDIR="/var/log/aide"
LOGNAME="`basename "$0"`_`date "+%Y%m%d_%H%M"`"
#Arhiveerime ning kui hästi, saadame edasi:
/bin/tar -zcvf ${LOGDIR}/${LOGNAME}.tgz "${LOGDIR}/${LOGNAME}.log" > /dev/null 2>&1
if [ $? -eq 0 ]; then
cd ${LOGDIR}
#This works too. The message content will be taken from text file below
#echo 'Hello!' >/root/scripts/audit_check.sh.txt
#echo "Arhiivifail manuses" | ${MAIL} -s "${HOSTNAME} Aide report" -q /root/scripts/audit_check.sh.txt -a ${LOGNAME}.tgz -S from=${WHOAMI}@${HOSTNAME} ${EMAIL}
echo "Arhiivifail manuses" | ${MAIL} -s "${HOSTNAME} Aide report" -a ${LOGNAME}.tgz -S from=${WHOAMI}@${HOSTNAME} ${EMAIL}
/bin/rm "${LOGDIR}/${LOGNAME}.log"
fi
WHOAMI
과HOSTNAME
두번? - David C. Rankin
파일이 텍스트 인 경우 다음과 같이 본문에서 가장 쉽게 보낼 수 있습니다.
sendmail recipient@example.com < message.txt
한 가지 더mutt
: 기본적으로 "From :"필드에 주소와 이름을 사용합니다.
필요하지 않은 경우 다음과 같은 문자열을 포함하는 대체 muttrc 파일을 만들 수 있습니다.
에서 설정 = "내 메일 데몬"
다음 파일과 함께이 파일 사용-F
명령 행 옵션.
mutt이 작동하지 않거나 설치되지 않은 경우,
*#!/bin/sh
FilePath=$1
FileName=$2
Message=$3
MailList=$4
cd $FilePath
Rec_count=$(wc -l < $FileName)
if [ $Rec_count -gt 0 ]
then
(echo "The attachment contains $Message" ; uuencode $FileName $FileName.csv ) | mailx -s "$Message" $MailList
fi*
mysqldump
출력을 전자 메일에 첨부합니다 (mutt
). 나는 출력을 zip / tar.gz로 압축하는 단계조차도 가지고 있을지도 모른다. - Kit Roed