我用的是6410开发板,4.3.2的交叉编译工具,搞了一个多礼拜,各种纠结各种查资料终于把让开发板能使用mutt发邮件了(内牛满面~~~)
以下灰色字体为常会碰到的错误(都是我移植过程中碰到的问题和解决办法)
笔者辛苦写的资料,转载请注明出处:http://blog.csdn.net/l461269717/article/details/8061576 (小默)
【软件的开发环境和资源】
交叉编译工具:arm-linux-gcc , arm-linux-ar , arm-linux-ranlib , arm-linux-strip
要实现一个邮件收发客户端,需要下载下面4个文件:
mutt-1.5.21.tar.gz
下载地址:http://www.mutt.org/download.html
openssl-1.0.0d.tar.gz
下载地址:http://www.openssl.org/source/
msmtp-1.4.24.tar.bz2
下载地址:http://sourceforge.net/projects/msmtp/files/msmtp
ncurses.tar.gz
下载地址:ftp://invisible-island.net/ncurses/
【软件的编译】
openssl 交叉编译步骤:
配置编译脚本
./config no-sse2 no-asm shared --prefix=/usr/local/arm_openssl
创建交叉编译后目标的生成目录
mkdir /usr/local/arm_openssl
修改生成的Makefile文件中的 CC , AR , RANLIB
CC = arm-linux-gcc
AR = arm-linux-ar
RANLIB = arm-linux-ranlib
编译
make
安装
make install
msmtp 交叉编译步骤:
配置编译脚本
./configure --host=arm-linux --with-ssl=no --with-libidn=no --with-gnome-keyring=no CC=arm-linux-gcc
编译
make
libncurses 交叉编译步骤:
配置编译脚本
./configure --prefix=/usr/local/arm_ncurses CC=arm-linux-gcc --host=arm-linux
创建交叉编译后目标的生成目录
mkdir /usr/local/arm_ncurses
编译
make
安装
make install
貌似安装停在,我强制中断了
出错原因:
在我的 x86 Host主机端的 ncurses 版本为ncurses.i386 5.5-24.20060715
但是被我编译的版本为 ncurses-5.7 用于 ARM,也就是说: 版本 5.5.24 无法对 ARM编译,所以我不得不升级到版本5.7的ncurses -至我的编译主机,再重新编译
解决办法:
通过ncurses-5.7源代码编译主机上的版本并安装,如下:
1 |
tar -zxf ncurses-5.7.tar.gz |
2 |
cd ncurses-5.7 |
3 |
./configure |
4 |
make |
5 |
sudo make install |
安装之后在 /usr/local/arm_ncurses 目录下会生成 bin/ 、include/ 、lib/ 、man/ 、share/ 5个目录,
其中lib目录下默认生成的是静态库。
mutt 交叉编译步骤:
配置编译脚本(注意,要打开mutt自带的邮件接收功能需要configure的时候带上参数 --enable-pop)
./configure --prefix=/usr/local/arm_mutt --host=arm-linux --with-curses=/usr/local/arm_ncurses --enable-pop CC=arm-linux-gcc
创建交叉编译后目标的生成目录
mkdir /usr/local/arm_mutt
修改 ./doc/ 目录下的 Makefile文件,将 CC CPP AR RANLIB STRIP 修改为宿主机下的gcc , gcc -E,ar , ranlib , strip (原先为 arm-linux-gcc ...)
将host_alias = arm-linux 修改为host_alias =
编译
make
安装
make install
【软件的配置】--msmtp
将 /usr/local/arm_openssl/lib 目录下载到目标板上 /mnt 目录,执行下面的命令,导出openssl库的路径:
export LD_LIBRARY_PATH=/mnt/arm_openssl/lib:$LD_LIBRARY_PATH
将 /usr/local/bin/msmtp 下载到目标板目录 /mnt,
在开发板上进去mnt目录,使用 --version 参数查看配置文件的目录:
./msmtp --version
msmtp version 1.4.24
Platform: arm-unknown-linux-gnu
TLS/SSL library: none
Authentication library: built-in
Supported authentication methods:
plain cram-md5 external login
IDN support: disabled
NLS: disabled
Keyring support: none
System configuration file name: /usr/local/etc/msmtprc
User configuration file name: /root/.msmtprc
Copyright (C) 2010 Martin Lambers and others.
This is free software. You may redistribute copies of it under the terms of
the GNU General Public License <http://www.gnu.org/licenses/gpl.html>.
There is NO WARRANTY, to the extent permitted by law.
由此看出,默认的系统配置文件目录在 /usr/local/etc/msmtprc
创建目录 /usr/local/etc ,创建文件 msmtprc ,编辑内容
mkdir -p /usr/local/etc
touch /usr/local/etc/msmtprc
vi /usr/local/etc/msmtprc
#account 163
host smtp.163.com
port 25
from [email protected]
auth login
tls off
user [email protected]
password *********(自己邮箱的密码)
logfile /var/log/msmtp.log
这边先测试一下:#msmtp [email protected]
hello
this is test!
然后按ctrl+D结束输入,可以在[email protected]看到发的邮件,或者#tail -f /var/log/msmtp.log 看看有没有成功。
如果提示:msmtp: cannot locate host smtp.163.com: Name or service not known
先在开发板ping smtp.163.com
如果提示:
是因为开发板上还只能ping通内网,ping不通外网的缘故,
则将虚拟机/etc/目录下的resolv.conf 和host*拷贝到开发板根文件系统上的/etc/目录下
再来ping smtp.163.com就可以ping通外网了
这时再来执行#msmtp [email protected]就能成功发送邮件了
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
【软件的配置】--msmtp
将 mutt 下载到目标板目录 /mnt 后,使用 -v 参数查看配置文件目录
# ./mutt -v
Mutt 1.5.21 (2010-09-15)
Copyright (C) 1996-2009 Michael R. Elkins and others.
Mutt comes with ABSOLUTELY NO WARRANTY; for details type `mutt -vv'.
Mutt is free software, and you are welcome to redistribute it
under certain conditions; type `mutt -vv' for details.
System: Linux 2.6.18-7.1 (7405d0-smp)
ncurses: ncurses 5.6.20061217 (compiled with 5.6)
Compile options:
-DOMAIN
-DEBUG
-HOMESPOOL -USE_SETGID -USE_DOTLOCK -DL_STANDALONE +USE_FCNTL -USE_FLOCK
+USE_POP -USE_IMAP -USE_SMTP
-USE_SSL_OPENSSL -USE_SSL_GNUTLS -USE_SASL -USE_GSS +HAVE_GETADDRINFO
+HAVE_REGCOMP +USE_GNU_REGEX
+HAVE_COLOR +HAVE_START_COLOR +HAVE_TYPEAHEAD +HAVE_BKGDSET
+HAVE_CURS_SET +HAVE_META +HAVE_RESIZETERM
+CRYPT_BACKEND_CLASSIC_PGP +CRYPT_BACKEND_CLASSIC_SMIME -CRYPT_BACKEND_GPGME
-EXACT_ADDRESS -SUN_ATTACHMENT
+ENABLE_NLS -LOCALES_HACK +HAVE_WC_FUNCS +HAVE_LANGINFO_CODESET +HAVE_LANGINFO_YESEXPR
+HAVE_ICONV -ICONV_NONTRANS -HAVE_LIBIDN +HAVE_GETSID -USE_HCACHE
-ISPELL
SENDMAIL="/usr/sbin/sendmail"
MAILPATH="/var/mail"
PKGDATADIR="/usr/local/arm_mutt/share/mutt"
SYSCONFDIR="/usr/local/arm_mutt/etc"
EXECSHELL="/bin/sh"
-MIXMASTER
To contact the developers, please mail to <[email protected]>.
To report a bug, please visit http://bugs.mutt.org/.
由此,可以看出配置文件的目录是 /usr/local/arm_mutt/etc
在开发板上创建配置文件目录:mkdir -p /usr/local/arm_mutt/etc
将宿主机上/etc/目录下的Muttrc 配置文件复制一份到开发板并进行修改,修改的地方是:
set sendmail="/mnt/msmtp"
set use_from=yes
set realname="[email protected]"
set [email protected]
set editor="vi"
并把set pgp_good_sign="`gettext -d gnupg -s 'Good signature from "' | tr -d '"'`"这一行注释掉(前面加#号,否则会提示sh: gettext: not found)
然后复制到目标板上的目录 /usr/local/arm_mutt/etc
将 mutt 下载到目标板目录 /mnt 后运行,
如果报错误:
Error opening terminal: vt102.
解决方法:
(目标板)
mkdir -p /usr/share/terminfo/v
以下两行可以写到/etc/profile中,就不用每次都重复输入了
export TERM=vt102
export TERMINFO=/usr/share/terminfo
现在需要复制我们宿主机 上的 vt102文件
(宿主机)
cd /usr/share/terminfo/v
ls -l
lrwxrwxrwx 1 root root 32 2011-06-23 19:31 vt102 -> ../../../../lib/terminfo/v/vt102
可以看出,这个目录下的 vt102 只是个软链接,实际的文件在上面给出的位置,将这个实际的vt102文件下载到目标板上的 /usr/share/terminfo/v 目录下
如果不是软连接,则直接把该文件复制到开发板上
以后可以把/mnt/目录下的mutt复制到/bin/下,就可以直接使用mutt命令了
【软件的使用方法】
使用mutt发送邮件的方法是:
mutt -s 邮件标题 收件人邮箱地址 -a 附件所在的路径 < 邮件正文的文件所在的路径
如下:
echo "this is the test mail !" | mutt -s "mail test" [email protected] -a ddd.c
(-s指定主题,-a指定附件,echo后面跟着邮件正文)
如果出现如下错误:
先ping 127.0.0.1如果能ping得通,再#mutt -v看下配置文件Muttrc有没有放错文件夹,我就是犯了这么白痴的错误。。。
配置正确后,用mutt -s "hello" [email protected] -a ddd.c < ddd.c 会收到带附件的邮件:
使用mutt接收邮件的方法是:
./mutt 打开图形界面
q:Quit d:Del u:Undel s:Save m:Mail r:Reply g:Group ?:Help
---Mutt: /var/mail/root [Msgs:0]---(date/date)--------------------------(all)---
按 c 键打开邮件服务器输入:
Open mailbox ('?' for list):
Open mailbox:
输入格式为 pop://邮件账户名:密码@pop服务器域名
如下:
pop://[email protected]:*********@pop.163.com
笔者辛苦写的资料,转载请注明出处:http://blog.csdn.net/l461269717/article/details/8061576 (小默)