Linux 使用curl发送电子邮件
如何使用curl命令行程序从gmail帐户发送电子邮件 我尝试了以下方法:Linux 使用curl发送电子邮件,linux,email,curl,command-line,gmail,Linux,Email,Curl,Command Line,Gmail,如何使用curl命令行程序从gmail帐户发送电子邮件 我尝试了以下方法: curl -n --ssl-reqd --mail-from "<sender@gmail.com>" --mail-rcpt "<receiver@server.tld>" --url smtps://smtp.gmail.com:465 -T file.txt 是否可以从个人服务器托管的帐户发送电子邮件,仍然使用curl?这会使身份验证过程更容易吗?curl--ssl-reqd\ --url
curl -n --ssl-reqd --mail-from "<sender@gmail.com>" --mail-rcpt "<receiver@server.tld>" --url smtps://smtp.gmail.com:465 -T file.txt
是否可以从个人服务器托管的帐户发送电子邮件,仍然使用curl?这会使身份验证过程更容易吗?curl--ssl-reqd\
--url'smtps://smtp.gmail.com:465' \
--用户的username@gmail.com:密码'\
--寄自username@gmail.com' \
--邮件rcpt'john@example.com' \
--上传文件mail.txt
mail.txt文件内容:
From: "User Name" <username@gmail.com>
To: "John Smith" <john@example.com>
Subject: This is a test
Hi John,
I’m sending this mail with curl thru my gmail account.
Bye!
From:“用户名”
致:“约翰·史密斯”
主题:这是一个测试
嗨,约翰,
我通过我的gmail帐户发送这封带有curl的邮件。
再见!
其他信息:
curl
7.21.6版
--unsecure
开关,这会阻止curl
执行SSL连接验证。有关更多详细信息,请参阅
--netrc文件
。看
如果要以复写或盲复写方式发送邮件:
curl --url 'smtps://smtp.gmail.com:465' --ssl-reqd \
--mail-from 'username@gmail.com' --mail-rcpt 'john@example.com' \
--mail-rcpt 'mary@gmail.com' --mail-rcpt 'eli@example.com' \
--upload-file mail.txt --user 'username@gmail.com:password' --insecure
From:“用户名”
致:“约翰·史密斯”
抄送:“玛丽·史密斯”
主题:这是一个测试
数据中未指定密件抄送收件人eli,仅在RCPT列表中指定。
像这样装入一个简单的email.conf
文件
Username: hi@example.com
Password: OKbNGRcjiV
POP/IMAP Server: mail.example.com
然后简单地运行sendmail.sh
,在使其可执行后,像这样运行(sudo chmod+x sendmail.sh
)
代码
#/bin/bash
ARGS=$(xargs echo$(perl-anle的//^[^::///g&&s//:\s++/g&&print'email.conf)
您不能通过本地(或您附近)的SMTP服务器发送电子邮件吗?确实可以,但这不是问题所在。谷歌禁止将其SMTP服务器用作垃圾邮件代理并不奇怪……我认为这是可能的,我只是认为我的语法不正确。我尝试过对我发布的内容稍作改动,并得到了不同的反馈,例如提示我输入密码,但电子邮件仍然失败……我相信Gmail将要求您使用Oauth进行身份验证。这对卷曲来说并不容易。你可以在上看到Google的Oauth文档。谢谢。这完全奏效了。关于更安全地执行此操作的任何建议。我想让服务器上的cron作业运行一个脚本,在特定时间发送电子邮件。我认为curl命令是最简单但不是最安全的。我不太熟悉smtp服务器之类的,所以如果有任何建议,我将不胜感激。如果我想使用类似的东西从bash脚本发送自动邮件,同时避免在命令行中使用密码?我注意到,如果您省略了密码部分,您会得到提示,因此我可以使用expect来处理这个问题,但是有没有更简单的方法让curl从重定向读取?或者甚至是一个环境变量?哦。。。我明白了。。。您可以将凭据放入.netrc。该命令已成功执行,但电子邮件为空,没有内容。@louigi600,我不会使用.netrc文件。但是,您可以使用
--netrc file
参数,然后使用bash子shell重定向。例如,curl--netrc文件否,这是不正确的,或者至少是可疑的;电子邮件不需要包含明确的Bcc:标题。就SMTP而言,邮件头只是数据,实际收件人是通过其他方式指定的(在这种情况下,如果要发送给多个收件人,请多次指定--mail rcpt
)。是的。这是不正确的,谢谢你指出!我正在更正答案。另请参见此处:。
From: "User Name" <username@gmail.com>
To: "John Smith" <john@example.com>
Cc: "Mary Smith" <mary@example.com>
Subject: This is a test
a BCC recipient eli is not specified in the data, just in the RCPT list.
Username: hi@example.com
Password: OKbNGRcjiV
POP/IMAP Server: mail.example.com
./sendmail.sh
#!/bin/bash
ARGS=$(xargs echo $(perl -anle 's/^[^:]+//g && s/:\s+//g && print' email.conf) < /dev/null)
set -- $ARGS "$@";
declare -A email;
email['user']=$1
email['pass']=$2
email['smtp']=$3
email['port']='587';
email['rcpt']='your-email-address@gmail.com';
email_content='From: "The title" <'"${email['user']}"'>
To: "Gmail" <'"${email['rcpt']}"'>
Subject: from '"${email['user']}"' to Gmail
Date: '"$(date)"'
Hi Gmail,
'"${email['user']}"' is sending email to you and it should work.
Regards
';
echo "$email_content" | curl -s \
--url "smtp://${email['smtp']}:${email['port']}" \
--user "${email['user']}:${email['pass']}" \
--mail-from "${email['user']}" \
--mail-rcpt "${email['rcpt']}" \
--upload-file - # email.txt
if [[ $? == 0 ]]; then
echo;
echo 'okay';
else
echo "curl error code $?";
man curl | grep "^ \+$? \+"
fi