在我的Ubuntu机器上成功使用Postfix后,我决定在一台新服务器上试用Exim,基于一些人评论它更容易设置和使用.
好吧,我立即遇到了我的Rails应用程序的问题,考虑到Postfix的使用方式,我决定删除Exim并安装Postfix.
但是,如何干净地去除它很难找到...
将Debian
Web服务器升级到之后,PHP Mail功能失败jessie
.软件版本是,
Apache2 : 2.4
Php : 5.6
Exim4: 4.8
Run Code Online (Sandbox Code Playgroud)
这个Web服务器有多个网站,我使用libapache2-mpm-itk
模块为不同的用户为每个网站运行php.所以www-data
没用过.
尝试使用php邮件功能发送电子邮件时,我得到以下错误.
unable to set gid=33 or uid=0 (euid=0): forcing real = effective
Run Code Online (Sandbox Code Playgroud)
Sendmail路径是,
sendmail_path /usr/sbin/sendmail -t -i
Run Code Online (Sandbox Code Playgroud)
它指向exim,
/usr/sbin/sendmail -> exim4
Run Code Online (Sandbox Code Playgroud)
我从http://blog.gaiterjones.com/send-php-mail-ubuntu-upgrade/找到了一个解决方案,当我在下面设置itk
模块时,问题解决了,
LimitUIDRange 0 2000
Run Code Online (Sandbox Code Playgroud)
但是root
不建议像我这样允许用户使用共享服务器.
有更好的解决方案吗?
编辑: 我发现了一个未解决的错误报告. https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=797653
谢谢!
我正在使用exim4.我有一个带有联系表单的Wordpress安装.我的主机名-f是mydomain.com.
表格正在发送电子邮件至info@mydomain.com.但它永远不会到达我的"非现场"电子邮件.如何设置它以便电子邮件不会卡在网络服务器上?
Exim应将电子邮件转发(路由)到非现场电子邮件info@mydomain.com.例如,当我从gmail发送到该地址时,它会立即发送.
我遵循了这个指南:https://library.linode.com/email/exim/send-only-mta-debian-6-squeeze但它没有帮助解决这个问题.
mydomain:/var/mail# exim -bt -d info@mydomain.com 2>&1
Exim version 4.80 uid=0 gid=0 pid=23864 D=fbb95cfd
Berkeley DB: Berkeley DB 5.1.29: (October 25, 2011)
Support for: crypteq iconv() IPv6 GnuTLS move_frozen_messages DKIM
Lookups (built-in): lsearch wildlsearch nwildlsearch iplsearch cdb dbm dbmjz dbmnz dnsdb dsearch nis nis0 passwd
Authenticators: cram_md5 plaintext
Routers: accept dnslookup ipliteral manualroute queryprogram redirect
Transports: appendfile/maildir/mailstore autoreply lmtp pipe smtp
Fixed never_users: 0
Size of off_t: 8
Compiler: GCC [4.7.2]
Library version: …
Run Code Online (Sandbox Code Playgroud) 我正在尝试在 Ansible 中对 Debian 上的 exim4 配置进行自动化——到目前为止我们一直在手动配置——但我被困在我正常运行的阶段dpkg-reconfigure exim4-config
。
我可以很容易地自动化这些步骤:
/etc/exim4/exim4-config.conf.conf
dpkg-reconfigure --frontend noninteractive exim4-config
它们在剧本中运行良好,但问题是并非我在交互式提示中看到的所有选项都在此 conf 文件中。例如,第二个设置System mail name
没有在 conf 文件中的任何地方指定。也不是最后一个设置,Root and postmaster mail recipient
在第一次配置后也不再显示在交互式提示中(为什么?)
然后我看到有些人建议使用debconf-set-selections
(here),我尝试调查 - 我安装了debconf-utils
软件包然后运行debconf-get-selections
- 然后我看到了那里的所有选项,但现在我想知道是否有一种方法可以debconf-set-selections
不用不必使用文件组所有的一次性设置,因为我只是想改变的话用exim4关联的值。如果我需要再次运行剧本,我试图避免覆盖可能设置的任何其他值(与 exim4 无关)。
除了将 的输出写入debconf-get-selections
文件然后使用 Ansible 的lineinfile
/template
模块替换我想要更改的值之外,是否有更简单的方法来解决这个问题?我宁愿避免这种方法。
我已经从exim4中首先遇到了这个拒绝错误:
2010-02-15 01:46:05 SMTP协议同步错误(无需等待问候语发送输入):拒绝连接H = ender [192.168.20.49] input ="HELO 192.168.20.49\r \n"
我修改了我的exim4配置以不强制同步,如下所示:
smtp_enforce_sync='false'
acl_smtp_connect = nosync nosync:
control = no_enforce_sync
accept
Run Code Online (Sandbox Code Playgroud)
但这似乎并不重要.对我来说不那么有意义的是为什么我首先得到了554.我发送一个HELO,我等待回复,不知怎的,在那之中,我设法生成"554错误"
我在下面的代码中做错了什么,这使得99%的时间失败(是的,它已经工作了两次).是的,套接字是阻塞的,我在recv中等待约5秒等待拒绝.在它工作的2次时,它根本没有停顿.
我试过发送EHLO而不是HELO,没有更好的运气.我甚至悲痛欲绝地连接一个telnet会话并说HELO.但是,我可以使用python smtp(来自另一台机器)在同一台服务器上发送电子邮件!
hSocket = _connectServerSocket(server, port);
if (hSocket != INVALID_SOCKET) {
BYTE sReceiveBuffer[4096];
int iLength = 0;
int iEnd = 0;
char buf[4096];
strcpy(buf, "HELO ");
strcat(buf, "192.168.20.49");
strcat(buf, "\r\n");
printf("%s", buf);
if (send(hSocket, (LPSTR)buf, strlen(buf), NO_FLAGS) == SOCKET_ERROR) {
printf("Socket send error: %d\r\n", WSAGetLastError());
return (false);
}
iLength = recv(hSocket,
(LPSTR)sReceiveBuffer+iEnd,sizeof(sReceiveBuffer)-iEnd,
NO_FLAGS);
iEnd += iLength;
sReceiveBuffer[iEnd] …
Run Code Online (Sandbox Code Playgroud) 我有一个使用Exim4的股票Debian Etch系统.这些域主要是本地的,但也有一些是远程的.要处理远程邮件的传递,我使用Debian配置文件:
/etc/exim4/hubbed_hosts
Run Code Online (Sandbox Code Playgroud)
此文件列出要传递到的域名和远程MX计算机.例如:
example.org: mx.example.com
example.com: mx2.example.com
Run Code Online (Sandbox Code Playgroud)
查看exim4配置文件,我看到这个使用如下:
hubbed_hosts:
debug_print = "R: hubbed_hosts for $domain"
driver = manualroute
domains = "${if exists{CONFDIR/hubbed_hosts}\
{partial-lsearch;CONFDIR/hubbed_hosts}\
fail}"
route_data = ${lookup{$domain}partial-lsearch{CONFDIR/hubbed_hosts}}
transport = remote_smtp
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是我正在使用的一些主机需要将其邮件传递到非标准端口.不幸的是,如果我尝试将其更改为包含端口,则Debian hubbed_hosts文件不起作用:
example.org: mx1.example.org:2525
example.com: 1.2.3.4.2525
Run Code Online (Sandbox Code Playgroud)
是否可以动态允许指定端口?
我需要在多个服务器上设置 exim4,但是我想知道是否可以创建一个脚本来自动完成安装过程并使用我的主机名在 exim4 上设置它?
sudo dpkg-重新配置 exim4-config
第 1 步:顶部选项(互联网站点;直接使用 SMTP 发送和接收邮件
第 2 步:主机名(默认)
第三步:127.0.0.1;::1(默认)
步骤 4:主机名(默认)
第 5 步:主机名
第 6 步:主机名
第 7 步:否
步骤 8:/var/mail/ 中的 mbox 格式
第 9 步:否
步骤10:根主机名
非常感谢任何帮助。谢谢!