移植mutt smtp到arm開發板(讓開發板支持mutt發郵件)

我用的是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
安裝順利,之後再重新執行
./configure --prefix=/usr/local/arm_ncurses CC=arm-linux-gcc --host=arm-linux &&make &&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 (小默)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章