smtp是出现的错误:SMTP server problem No route to host。
查看了一下移植后的linux系统中好像没看到25端口的调用!
# netstat -an Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:8553 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:8554 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:8555 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:8556 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:8557 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN netstat: no support for `AF INET6 (tcp)' on this system. netstat: no support for `AF INET6 (udp)' on this system. netstat: no support for `AF INET6 (raw)' on this system. Active UNIX domain sockets (servers and established) Proto RefCnt Flags Type State I-Node Path unix 2 [ ] DGRAM 444 @/org/kernel/udev/udevd #
SMTP server problem No route to host这个错误是是因为没有打开25号端口造成的吗? linux移植中怎么打开25端口? 今天又是富有激情的安装与arm板移植的篇章。因为前天答应帮学长移植smtp并写个移植笔记,所以这两天抽时间把这东西搞定了。SMTP的移植不是非常轻松,所以我还是把笔记贴出来,也好让大家少走点弯路,但是大家最好自己先试试独立安装移植看看,如果是赶时间或者真的没办法了就来参考参考吧!
一、首先介绍一下SMTP(Simple Mail Transfer Protocol)
SMTP (Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。是一种TCP协议支持的提供可靠且有效电子邮件传输的应用层协议。SMTP是建立在 TCP上的一种邮件服务,主要用于传输系统之间的邮件信息并提供来信有关的通知。
今天我们将要安装移植的smtp0.8.5就是smtp协议的API库包。注意哦,smtp只是一个协议,是邮件服务系统中的一部分,smtp完成邮件系统中的发送任务。
二、安装前准备:
1.源码包下载地址:http-//developer.berlios-de/project/showfiles.php?group_id=149
2.我的安装环境:
UBUNTU12.04
arm-linux-gcc4.3.3
glib2.40.0.tar.xz
libsmtp-0.8.5.tar.bz2
3.glib for arm and pkg-config支持
参考我的另一篇文章:http-//blog-csdn-net/jiebaoabcabc/article/details/24439583
由于smtp库依赖于glib或者说就是建立在glib上的,所以smtp在编译时,系统也要有glib的库(交叉编译时也需要交叉工具链编译出来的glib库)。
4.glib2.0 for x86支持:
ubuntu系统可以通过apt-get install libglib2.0安装glib2.0连带套件
三、开始安装smtp forx86:
1.解压缩源码,并建立安装路径,安装目录下应该包含bin、include、lib目录
2.阅读README和INSTALL:
README:主要介绍0.8.5版本与之前版本相比更加适合嵌入式环境而且移植性有所提高。
INSTALL:简单介绍安装过程,重点是测试用testapp.c的使用,这个我会在后面测试时做稍微的修改。
3.跟一般的安装一样,开始配置makefile:
先来到smtp for pc的解压目录下
键入命令:CC= gcc ./configure --prefix=/usr/local/smtp/ 其他的配置都让命令自己去测试吧。
得到Makefile后修改几个Makefile:
修改Makefile:
21 [
CPPFLAGS = `pkg-config --cflags glib-2.0`
CFLAGS = $(CPPFLAGS) -g -O2
LDFLAGS = `pkg-config --libs glib-2.0`
LIBS =
24 ]
修改./smtp/Makefile:
33 [
CFLAGS = -I. -I.. `pkg-config --cflagsglib-2.0` -g -O2 -DUSE_MIME
LDFLAGS = -L. `pkg-config --libsglib-2.0`
34 ]
修改./examples/Makefile:
32 [
CFLAGS = -I. -I../include `pkg-config--cflags glib-2.0` -g -O2
LDFLAGS = -L. -L../smtp -L../mime`pkg-config --libs glib-2.0`
33 ]
40 [
ifeq (yes,yes)
SOURCES=smtpmail.cmultipart.c singlepart.c
OBJS=smtpmail.omultipart.o singlepart.o
APPS=smtpmailmultipart singlepart
LIBS= -lsmtp -lsmtp_mime `pkg-config --libs glib-2.0`
else
SOURCES=smtpmail.c
OBJS=smtpmail.o
APPS=smtpmail
LIBS = -lsmtp `pkg-config --libsglib-2.0`
endif
51 ]
修改Makefile的主要目的在于我的pc上没有glib-config,而且pkg-config的功能(引导编译器找到必要文件路径)与其相同,那就使用pkg来代替他。
4.make
问题一:gcc -I. -I../include `glib-config --cflags` -g -O2-DUSE_MIME -c -o libsmtp_comm.olibsmtp_comm.c
/bin/sh: 1:glib-config: not found
解:如何查看linux系统上是否安装了glib:
-----使用dpkg -l | grep glib命令查看是否已安装glib
这个问题主要是因为编译器找不到glib-config或者pc上没有glib-config,可以使用pkg代替。
问题二:make[1]: 正在进入目录 `/home/smtp/smtp-pc/libsmtp-0.8.5/examples'
gcc -I.-I../include -I/usr/lib/i386-linux-gnu/glib-2.0/include -I/usr/include/glib-2.0`pkg-config --cflags` -g -O2 -o smtpmail smtpmail.o -L. -L../smtp -L../mime`pkg-config --libs` -lsmtp -lsmtp_mime-lglib
Must specifypackage names on the command line
Must specifypackage names on the command line
/usr/bin/ld:cannot find -lglib
解:`pkg-config--libs glib-2.0`
这个问题主要是Makefile没有将路径替换干净,哪里报错就去找对应目录下的Makefile,修改完整便是。
5.make install
这样smtp forx86就安装完了,下面我们来测试一下。
四、测试smtp for x86
1.postfix服务器安装
(mail服务器想搭建的好是非常困难的,但是测试用用的配置还是简单的,想要在linux上建站的可以看看鸟哥的私房菜,看了下顿时感觉自己是战五渣- -|||)
由于smtp也是典型的两段协议,smtp客户端的测试需要一个也支持smtp协议的mail服务器。大家可以使用网上免费邮箱的服务器,比如smtp.qq-com。telnet smtp.qq-com 25可以测试smtp的一些收发机制,不过这些免费邮箱都需要登录,导致我测试程序一直过不去,所以我决定安装个本地的mail服务器。postfix是sendmail的衍生产品,而且功能强大、配置方便,所以我选择他来做我的服务器。
apt-getinstall postfix就可以安装postfix,在配置菜单中选择服务器的使用范围(我选了本地配置)和服务器域名(这个随便写,比如xxx.xxx-com),这样安装就完成了。
鸟哥的私房菜中也对postfix进行了详解,所以我就不多介绍了,主要讲一下我的/etc/postfix/main.cf配置。
2.main.cf配置
/usr/share/postfix/main.cf.dist是这个重要配置文件的说明书
照着里面的配置,我修改了:
35 +mynetworks = 192.168.0.0/24 127.0.0.0/8 运行接收的网段
38 inet_interfaces = all 监听所有IP
保存完好serverpostfix restart重启服务器
netstat-ln | grep 25可以看看25端口的监听是否开始,看到0.0.0.0:25说明服务良好
3.修改examples/singlepart.c
&n [1] [2] 下一页
|