如何用我的CentOS服务器发送电子邮件?

我只用CentOS 5.5build立了一个适中的家庭服务器。 我希望服务器能够发送电子邮件到我的Gmail帐户或其他电子邮件帐户的各种事情,如cron作业。 另外,通过在服务器上运行/开发的PHP应用程序也可以发送电子邮件。 甚至可以让服务器通过邮件命令发送邮件。

我知道有一百万个谷歌search结果将你的Linux服务器设置为一个电子邮件服务器或configurationsendmail等,但他们似乎并不是我正在寻找…至less我不这么认为。 我不想设置其他客户端可以连接发送电子邮件或任何复杂的企业服务器。

我只想让我的服务器向我发送有关内容的电子邮件。 似乎应该是简单的…任何人都可以指出我在正确的方向吗?

UPDATE

根据下面的用户请求,我尝试了这个命令:

/bin/mail -s "My Subject" "myaddress@gmail.com" < /home/john/test 

没有错误或任何东西。 但是电子邮件从未出现在我的收件箱中。 这是我的maillog

 Oct 27 00:52:19 localhost sendmail[13702]: o9R6qJhU013702: from=root, size=10906, class=0, nrcpts=1, msgid=<201010270652.o9R6qJhU013702@localhost.localdomain>, relay=root@localhost Oct 27 00:52:19 localhost sendmail[13703]: o9R6qJOd013703: from=<root@localhost.localdomain>, size=11209, class=0, nrcpts=1, msgid=<201010270652.o9R6qJhU013702@localhost.localdomain>, proto=ESMTP, daemon=MTA, relay=localhost.localdomain [127.0.0.1] Oct 27 00:52:19 localhost sendmail[13702]: o9R6qJhU013702: to=myaddress@gmail.com, ctladdr=root (0/0), delay=00:00:00, xdelay=00:00:00, mailer=relay, pri=40906, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (o9R6qJOd013703 Message accepted for delivery) 

任何线索?

/bin/mail -s "Enter Subject Line here" -a /home/.../whateverFileYouWantAttached "you@YourEmailAddress" < /home/me/textBody.letter

试试上面的命令:)

简单的回答:

设置sendmail 。 这将取决于你的分配,但这并不难。 如果您有任何具体问题,可以去问问。

复杂的答案:

如果你问这个问题,你可能不应该只是跳枪, 还要设置sendmail justtt

你需要考虑一些事情:

  1. 您的ISP允许您发送电子邮件吗? 您可能位于非服务器IP范围,因此,许多电子邮件提供商将会彻底阻止您。

  2. 您将使用哪个地址作为您的发件人地址? 您是否有权从此地址发送(SPF,DomainKeys等)? 如果没有,您的邮件可能会被电子邮件提供商检测为垃圾邮件—正确的。

  3. 最后,但并不是最不重要的:你真的需要使用自己的SMTP服务吗? 为什么使用你的ISP的任何理由是不够好?

回到过去,设置SMTP服务器并不是什么大不了的事情。 现在,设置可能更容易,但是设置它实际上是将消息传送到人的邮箱 ,这是一个挑战。

我可以证实,以上的build议都不是在我的CentOS系统上工作 – 而不是一个。 这是烦人的!

然后,我在运行CentOS 6.4的全新Amazon实例上也尝试了同样的方法,即使使用默认configuration,我也可以毫无问题地发送邮件。 我所要做的只是

 yum install mailx 

之后如上所述发送邮件就像一个魅力。 安装像sendmail这样的复杂function对于Jakub所要做的事情来说并不是必需的。

它必须是我的ISP的一些configuration,因为我在这里没有一个可configuration的防火墙。

您需要执行以下操作:

  1. sudo yum install postfix telnet mailx
  2. sudo /etc/init.d/postfix start
  3. sudo vi /etc/postfix/main.cf
  4. 更改mydestination = mydomain.com, localhost.mydomain.com, localhost

    mydestination = localhost.mydomain.com, localhost

从命令行使用以下命令进行testing

  1. mail address@example.com主题:
  2. 从demoslice.comtesting电子邮件testing
  3. 电子邮件的正文。
  4. .

第4号 – 完成电子邮件的正文只是一个句号。 你现在应该有邮件。

以上将为您提供一个可用的MTA(邮件传输代理)。 一些可以帮助你进行更高级设置的资源可以在slicehost的 CentOS电子邮件设置文章中find(向下滚动到CentOS和Email部分)。 您应该考虑正确设置以下内容:主机名,RDNS(反向DNS)和SPF(发件人策略框架)logging与您的DNS提供商。

你有没有修改你的/etc/mail.rc来设置smtp地址?

尝试安装postfix并在configuration文件中设置mydestination,即使它应该与sendmail一起工作。

Postfix是在正确的轨道上,但除非gmail认为你至less是远程合法的(例如,你不是一个垃圾邮件发送者)让你的邮件交付是不太可能的。

这个过程有点牵扯到这里,但是我发现实现这个目的最简单的方法(并且发送邮件)是使用你自己的gmail帐户作为传输设置postfix作为中继。

我使用的过程详述如下:

http://rs20.mine.nu/w/2011/07/gmail-as-relay-host-in-postfix/

不需要设置自签名证书(按照sendmail),根据我的经验,它只是工作!

简单的解决scheme不是sendmail,而是sendEmail:

http://caspian.dotconf.net/menu/Software/SendEmail/#download

一个perl脚本,可以很容易地configuration为通过任何SMTP服务器发送 – 我使用它通过Gmail帐户始终发送,但它也适用于端口25上的普通SMTP over TCP等。

我通常使用我自己的用于Gmail的shell脚本来封装sendEmail perl脚本:

 #!/bin/bash # Send gmail through an account specified in ~/.sendGmailAuthFile (or file identified with -k.) # The auth file must have values for the -f (from@domain) and -xp (password) options of sendEmail, # structured as: # # user=me.surnamen@gmail.com # pwd=xxxxxxx # # We will fill in the rest, and other params are passed through to sendEmail # # Example: sendGmail -u "My subject line" -t "test@whatever.com" < message.txt function sendGmailImmed { local authFile="$HOME/.sendGmailAuthFile" for arg in "$@"; do if [[ "$arg" == "-k" ]]; then shift authFile="$1" shift fi done initAuthFile $authFile source $authFile sendEmail -f $user -xu $user -xp $pwd -s smtp.gmail.com:587 -o tls=yes "$@" } function initAuthFile { # If the authfile doesn't exist, we'll create a dummy: if [[ ! -f $1 ]]; then echo "# sendGmail authentication file: " > $1 echo "user=my.name@gmail.com" >> $1 echo "pwd=my-password" >> $1 echo "A shell auth file has been created as $1" fi } if [[ -z $sourceMe ]]; then sendGmailImmed "$@" fi