Linux 使用curl发送电子邮件

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命令行程序从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'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的邮件。
再见!
其他信息:

  • 我正在使用支持SSL的
    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