我用的是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 from=xiaomo@163.com
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 (小默)