1.fabric-sdk-goçç®å使ç¨
2.htmlå¶ä½ä¸ªäººç®å代ç ï¼
3.linux系统下邮件服务器sendmail的源码配置
fabric-sdk-goçç®å使ç¨
使ç¨fabricæä¾çcryptogenå·¥å ·çææ件模æ¿$ cryptogen showtemplate > crypto-config.yaml
è¿è¡ä¿®æ¹,æ·»å ä¸ä¸ªç»ç»,ä¸ä¸ªordererèç¹.
æ ¹æ®crypto-config.yamlæ件çæè¯ä¹¦æ件:
$ cryptogen generate --config=crypto-config.yaml
æ¥ççæçè¯ä¹¦æ件夹ç»æ:
éè¦ä»fabricçæºç æ¡ä¾ä¸æ·è´configtx.yamlæ件
$ cp $GOPATH/src/github.com/hyperledger/fabric-samples/first-network/configtx.yaml ./
对configtx.yamlæ件è¿è¡ä¿®æ¹.
ä¿®æ¹ä¹å,å建ä¸ä¸ªæ件夹,æ¥ä¿åå³å°å建çåä¸åºåæ件
å°å建åºåæ件åééçå½ä»¤åå°ä¸ä¸ªèæ¬ä¸! generate.sh
èæ¬æ件åé ç½®æ件çç®å½ç»æ:
æ§è¡generate.shæ件çæåä¸åºåæ件åéé,å ¶å®åªæä¸ä¸ªç»ç»,ä¹æ²¡å¿ è¦çæéèç¹æ´æ°æ件..
$ ./generate.sh
é ç½®docker-composeæ件:
å¯å¨å®¹å¨, å¯å¨åæ¥ç容å¨è¿è¡æ åµ
$ docker-compose up -d
$ docker-compose ps
å¨è¿é,å建两个èæ¬æ件,ç¨äºdocker容å¨ç管ç
clear_docker.shæ件:
restart.shæ件:
å建é ç½®æ件çæ¶å,æ两个æ件å¯ä»¥è¿è¡åè...
ä¿®æ¹åçsdké ç½®æ件:
å建åºä¸ä¸ªæ¨¡å对象,ç»å ¶èµå¼,并å¼å§åå§åsdk
ä½¿ç¨ pkg/fabsdk/fabsdk.goä¸çNew()æ¹æ³è¿è¡å®ä¾å
å建请æ±ä¹å,éè¦ä½¿ç¨ gopackager.NewCCPackage æ¹æ³çæä¸ä¸ªresource.CCPackage 对象,ä¼ é两个åæ°,ä¸ä¸ªæ¯é¾ç çè·¯å¾(ç¸å¯¹äºå·¥ç¨çè·¯å¾), ä¸ä¸ªæ¯GOPATHçè·¯å¾.
å®è£ é¾ç ,使ç¨pkg/client/resmgmt/resmgmt.goæ件ä¸çæ¹æ³
å建请æ±ä¹å,éè¦çæä¸ä¸ª*cb.SignaturePolicyEnvelopeç±»åç对象,ä½¿ç¨ third_party/github.com/hyperledger/fabric/common/cauthdsl/cauthdsl_builder.goæ件ä¸çæ¹æ³å³å¯,æä¾äºå¥½å 个æ¹æ³, 使ç¨ä»»æä¸ä¸ªå³å¯.è¿éä½¿ç¨ SignedByAnyMemberæ¹æ³: éè¦ä¼ å ¥æå±ç»ç»ID
å®ä¾åé¾ç
ä½¿ç¨ pkg/client/channel/chclient.goä¸ç Execute()æ¹æ³,æ¥è¿è¡æ°æ®åå ¥çæä½:
rsp, err := model.Channelclient.Execute(req)
åå ¥ä¹å,è¦å建请æ±:
tempArgsæ¯è¦ä¼ ç»é¾ç çåæ°,å¯ä»¥åä¸å°è£ ,å°±ä¸ååæ°ä¸ªæ°çéå¶äº
ä½¿ç¨ pkg/client/channel/chclient.goä¸ç Query()æ¹æ³,æ¥è¿è¡æ°æ®æ¥è¯¢çæä½: æ¥è¯¢ä¹å,åæ ·éè¦å建请æ±.
é¾ç å¨å·¥ç¨ä¸çè·¯å¾åºè¯¥æ¯ å·¥ç¨å/chaincodeæ件夹
æ¯å¦:
driverFabricDemo/chaincode
èä¸åºè¯¥çç¥æå·¥ç¨åè¿æ ·å: chaincode
é误åå :cert.URIs å tpl.URIs è¿ä¸¤ä¸ªå段没æ被å®ä¹.
è¿å ¥tpl对象ä¸, /usr/local/go/src/crypto/x/x.go æ¯ä¸ªç»æä½,并没æåç° URIs å段
对goçæ¬è¿è¡å级,ä»1.9.3å级å°1..3, å次è¿å ¥ /usr/local/go/src/crypto/x/x.go æ件ä¸,æ¥çç»æä½å 容:
å¨æ§è¡sdkçExcute()æ¹æ³æ¶æ¥é.
æ¹æ³ä¸åå¨,ä¸è¬æ¯ç±äºé¾ç çInvokeæ¹æ³ä¸çæ¹æ³ååExcute()æ¹æ³ä¼ å ¥çæ¹æ³åä¸ä¸æ ·.
ä½æ¯å¯ä»¥è¯å®çæ¯,é¾ç çInvokeæ¹æ³ä¸çæ¹æ³åå,项ç®ä¸æ§è¡Excute()æ¹æ³æ¶ä¼ å ¥çæ¹æ³åæ¯å®å ¨ä¸æ ·ç! ä½æ¯å¾å¥æªäº,为ä»ä¹ä¼åºç°è¿ä¸ªé误å¢? ä½¿ç¨ docker rmi å é¤æ dev-peerx.travle.xq.com çéå,åéæ°è¿è¡å³å¯.
å¨å建å®ä¾åé¾ç 请æ±çæ¶å
æ»æ¯æ示
Cannot use str (type *cb.SignaturePolicyEnvelope) as type *common.SignaturePolicyEnvelope less... (⌘F1) Inspection info: Reports composite literals with incompatible types and values
æææ¯ç¸åçç±»å,å´æ»æ¯æ¥é,åºè¯¥æ¯IDEçé®é¢.ævendoræ件夹å é¤å,å°±ä¸ä¼ææ示äº. å使ç¨vendor对工ç¨è¿è¡init å add +external 就好äº!!
åºç°è¿ä¸ªé误,ä¸è¬é½æ¯é ç½®æ件åªä¸ªå°æ¹åéäº,éè¦ç»å¿æ£æ¥
htmlå¶ä½ä¸ªäººç®å代ç ï¼
ç½é¡µè®¾è®¡ä¸ªä¸ªäººç®å页é¢ç代ç æ¯ä»ä¹
ç½é¡µè®¾è®¡ä¸ªä¸ªäººç®å页é¢æ¯å±ç代ç æ¯ãæ ¹æ®æ¥è¯¢ç¸æç£¨è®©å ³èµæä¿¡æ¯ï¼ç½é¡µæ¸¸æ©è®¾è®¡æ¯æ ¹æ®å½å¤©çæ°æ®è¿è¡ç´¯è®¡åºæ°ï¼å¨åä¸ä¸ªipä¸ï¼ä»1å¼å§ï¼åäºä¸ªä¸ªäººç®åï¼é¡µé¢ç代ç ä¼ç´¯è®¡æã
htmlå¶ä½ç®å代ç ä¸æ¯ç¨tableçä½ è¯è¯è¿ç§ï¼
é¦å è¦ç¡®éè¦å®ç®åçæ ¼å¼ï¼å¦æ使ç¨HTMLåç®åï¼åºæ¥åºå²æçæ ¼å¼å¯è½å°±æ¯HTMï¼HTMLåç¼çæ件ï¼ä½¿ç¨WORDååºæ¥çæ¯DOCæ©å±åã
ç¡®å®ä½¿ç¨ç½é¡µæ ¼å¼åç®åï¼å»ºè®®ä½¿ç¨è½¯ä»¶æ¥åï¼è¿æ ·åªéè¦å¨è½¯ä»¶éé¢åå¥½æ ¼å¼ï¼èªå¨çæ代ç ï¼å¡«å å 容å³å¯ï¼DREAMWEAVER,FRONTPAGEçï¼ä¹å¯ä»¥ä½¿ç¨WORDç¼ååä¿å为页é¢æ ¼å¼ã
代ç ç¼åæ¯è¾éº»ç¦ï¼ä¸è¬æ¥è¯´ç«ç¹å¶ä½çæ¶åï¼ç¨DIVå¸å±ï¼æ°æ®è¾å¤çæ¶åæå«å°±ä¼éæ©ä½¿ç¨TABLEå¸å±ï¼å¯¹ç®åæ¥è¯´ï¼å¯è½ä¼ç¨å°TABLEæ¥å¸å±ï¼çº¯ä»£ç çTABLE,TR,TDä¼ç¨å°å¾å¤ï¼æå·¥ç¼åä¼å¾éº»ç¦ï¼æ ¼å¼ä¹ä¸å®¹ææ§å¶ã
htmlå¶ä½ä¸ªäººç®åç½é¡µä»£ç
以ä¸æ¯æç¨htmlçç¸å ³ç¥è¯å¶ä½ç个人ç®åç½é¡µï¼è¯ä¸å¤è¯´å ççæç»ææï¼
å¦ä¸æ示项ç®ä¸å ±å为5个é¨åï¼åå«å¯¹åºå¯¼èªæ ç5个å 容ãå ¶ä¸é¡¹ç®æè½ç¨çæ¯echartséçæ±ç¶å¾ï¼ä½åå±ç¤ºç¨çæ¯bootstrapéçè½®æå¾ï¼é¤æ¤ä¹å¤å°±æ¯htmlçåºç¡å 容ãä¸é¢æ们å±ç¤ºä¸ä¸é¡¹ç®ç代ç é¨åï¼
!DOCTYPEhtmlhtml
head
metacharset="utf-8"
titleæç个人ç®å/title
linkrel="stylesheet"href="lib/css/color.css"
linkrel="stylesheet"href=""
scriptsrc=""/script
scriptsrc=""/script
scriptsrc=""/script
/head
body
divclass="jumbotrontext-center"style="margin-bottom:0"id="grad1"
imgsrc="lib/pic/1.jpg"width="px"height="px"/
h3é»æºå¥/h3
pstyle="font-size:px;"å¹´åå ¥é西å½é²å·¥ä¸èä¸ææ¯å¦é¢ï¼br/å¦ä¹ 软件ç¼ç¨ï¼å¯¹ç¼ç¨ææµåçå ´è¶£ï¼
å¨èå¸çæ导ï¼br/åèªå·±ç课ä¸ç»ä¹ ï¼æ¸æ¸å¯¹ç¼ç¨æäºæ´æ·±å ¥çäºè§£éè£èãbr/å¨è¯¾ä½æ¶é´ï¼
æå欢å±æãè·æ¥åæä¹ä¹çãbr/å好ç»äº¤å¿åéåçæåï¼ä¸èµ·å享å¦ä¹ ççæ´»çç»éªãbr/
æè¯å¥½çå¢éæè¯ï¼å¦ä¹ æ¶æºå¯è®¤çè´è´£ã?/p
/div
navclass="navbarnavbar-inverse"
divclass="container-fluid"
divclass="navbar-header"
buttontype="button"class="navbar-toggle"data-toggle="collapse"data-target="#myNavbar"
spanclass="icon-bar"/span
spanclass="icon-bar"/span
spanclass="icon-bar"/span
/button
!--aclass="navbar-brand"href="#"ä¸ä¸æè½/a--
/div
divid="relation"
table?class="tabletable-striped"
tbody
tralign="center"
tdahref="#email"buttontype="button"class="btnbtn-primarybtn-lg"
spanclass="glyphiconglyphicon-envelope"/span
/button/a/td
tdahref="#email"buttontype="button"class="btnbtn-primarybtn-lg"
spanclass="glyphiconglyphicon-earphone"/span
/button/a/td
tdahref=""target="_blank"buttontype="button"class="btnbtn-primarybtn-lg"
spanclass="glyphiconglyphicon-user"/span
/button/a/td
/tr
/tbody
/table
/div
divclass="collapsenavbar-collapse"id="myNavbar"
ulclass="navnav-pillsnav-justified"
liahref="#main"ä¸ä¸æè½/a/li
liahref="#project"项ç®ç»éª/a/li
liahref="#myCarousel"ä½åå±ç¤º/a/li
ç¶åliahref="#education"æè²ç»å/a/li
liahref="#relation"èç³»æ¹å¼/a/li
/ul
/div
/div
/nav
!--为EChartsåå¤ä¸ä¸ªå ·å¤å¤§å°ï¼å®½é«ï¼çDom--
divid="main"style="width:
%;height:px;left:%;"/div
scripttype="text/javascript"
//åºäºåå¤å¥½çdomï¼åå§åechartså®ä¾
varmyChart=echarts.init(document.getElementById('main'));
//æå®å¾è¡¨çé 置项åæ°æ®
varoption={
title:{
text:'ä¸ä¸æè½å¹³åå'
},
tooltip:{ },
legend:{
data:['åæ°'],
},
xAxis:{
data:["Javaè¯è¨","mysqlæ°æ®åº","Javascriptè¯è¨","webå¼å","ssmæ¡æ¶","springbootæ¡æ¶"],axisLabel:{
//inside:true,éèxè½´å 容
//æ¹åxè½´åä½é¢è²
//?textStyle:{
//color:'#8B'
//?}
},
},
yAxis:{ },
series:[{
name:'åæ°',
type:'bar',
//æ¹åå¾è¡¨é¢è²
color:['#8EE5EE'],
data:[,,,,,]
}],
};
//使ç¨åæå®çé 置项åæ°æ®æ¾ç¤ºå¾è¡¨ã
myChart.setOption(option);
/script
ulclass="list-unstyled"align="center"
liJavaåºç¡:br/
æå ¥é¨æ¶é¦å å¦çå°±æ¯Javaåºç¡ï¼ç¶ååå°Javaé«çº§å¼åï¼br/
å¨å¦ä¹ è¿ç¨ä¸èå¸ç»è´çæå¦ä¸ºæ们æä¸äºç¢åºçjavaåºç¡ã/li
limysqlæ°æ®åº:br/
mysqlæ°æ®åºæ¯æ们大ä¸ç¬¬äºå¦æå¼ç课ï¼é åJavaé«çº§å¼åä¸èµ·å¦ä¹ çç§ç®ï¼br/
å 为èªå·±æ¬èº«å°±å欢æ°æ®åºçä¸äºä¸è¥¿ï¼ææmysqlæ°æ®åºä¹æè¯å¥½çåºç¡ã/li
liJavascriptè¯è¨ï¼br/
å¨å¦JavaScriptä¹åææè¯å¥½çhtml5åcssåºç¡ï¼æå¦ä¹ JavaScriptæ¶ä¹æ¯åå顺å©çææ¡äºè¯¾æ¬éçå 容ã/li
liwebå¼å:br/
webå¼åæ¯ææåç±çç§ç®ä¹ä¸ï¼servletçå¦ä¹ ç»æå¯åæ·±å»ã/li
lissmæ¡æ¶:br/
ssmæ¡æ¶ç¸æ¯springbootèè¨æ¯æ¯è¾ç¹ççï¼ä½æ¯å¨å¦ä¹ åç解起æ¥å´æ¯springbootæ´å®¹æ让人ææ¡ã/li
lispringbootæ¡æ¶:br/
springbootæ¡æ¶å ¥é¨èµ·æ¥ååè¿ éï¼å¨åºç¡ç使ç¨èµ·æ¥ä¹æ¯ååæ¹ä¾¿ï¼ä½æ¥çæºç æ¶ï¼æ²¡æssm容æ让人ç解ã/li
/ul
divclass="container"align="center"
divclass="row"
divclass="col-sm-4"
h3class="text-info"id="project"项ç®å称/h3
ulclass="navnav-pillsnav-stacked"
liclass="active"ahref="#car"æ°è½æºæ±½è½¦é¡¹ç®/a/li
liahref="#city"å泡åå项ç®/a/li
liahref="#bug"ç¬è«é¡¹ç®/a/li
/ul
hrclass="hidden-smhidden-mdhidden-lg"
/div
divclass="col-sm-8"align="left"
h3class="text-info"项ç®å 容/h3
h2id="car"æ°è½æºæ±½è½¦/h2
h5ä¼ä¸saaså·¥å/h5
pæ°è½æºæ±½è½¦é¡¹ç®æ¯æ们ææ¡smmæ¡æ¶ç¥è¯å第ä¸ä¸ªå®æ项ç®ï¼è¯¥é¡¹ç®ç±å·¥åèå¸æ导ä¸ï¼åå端é½ç±æ们个人ç¬ç«å®æç项ç®ã
该项ç®ç¨å°äºï¼html5+css3ï¼mysqlæ°æ®åºï¼springï¼mybatisï¼springmvcæ¡æ¶ï¼ajaxï¼JavaScriptï¼webï¼bootstrapï¼echartsï¼sweetalert
çææ¯ã项ç®ä»å¼å§å°å®ææ们ç¨äº2个æçæ¶é´ã该项ç®ç主è¦æ¯åä¸ä¸ªæ±½è½¦app社交平å°ï¼å æ¬ç¨æ·ç»å½æ³¨åï¼ç¨æ·ä¸ä¼ 车è¾ä¿¡æ¯ï¼ç»è®¡ç¨æ·è½¦è¾ï¼åææ é车è¾åå ï¼
以å导èªãæååçåè½ä¸ä½ç汽车平å°ã该项ç®ç¨æ·ç使ç¨æ¹æ³å¦ä¸ï¼p1.æ°ç¨æ·è¿è¡ç»å½æ³¨åã/p
p2.ç»å½æååæ°ç¨æ·å¯ä»¥è¿è¡ä¿®æ¹å¯ç ãæµç§°ã头åç个人信æ¯ã/p
p3.æ°ç¨æ·ä¸ä¼ èªå·±è½¦è¾ä¿¡æ¯ï¼å¹¶ç»å®è´¦å·ã/p
p4.æ°ç¨æ·å¯ä»¥ä¸ä¼ èªå·±è½¦è¾æ éï¼ç³»ç»èªå¨æ¥è¯¢è½¦è¾æ éåå 以åç»´ä¿®æ¹æ¡ã/p
p5.ç¨æ·å¯ä»¥æ·»å 车åï¼å¨è½¦åååå¸æ±å©ä¿¡æ¯çã/p
p6.ç¨æ·è¿å¯ä»¥è¿è¡å°å¾å¯¼èªï¼ä»¥åæ¥è¯¢å ¬äº¤è½¦ï¼åºç§è½¦ï¼é£æºç交éå·¥å ·çæ¶é´åè¡ç¨ã/p
péè¿å®æè¿ä¸ªé¡¹ç®ï¼è®©æè·å¾äºå¾å¤§çè¿æ¥ãä¸è®ºæ¯å端ç¥è¯è¿æ¯å端ç¥è¯ï¼å¨è¯¥é¡¹ç®ä¸
é½å¾å°äºå åçå±ç¤ºã让æä¹ä¸ä¸åå¸æ¶äºå¾å¤çç¥è¯ä¸æè½ï¼ä¸ºåé¢ç项ç®æä¸äºåå®çåºç¡ã/p
/p
br
h2id="city"å泡åå/h2
h5ä¼ä¸saaså·¥å/h5
på泡åå项ç®æ¯æ们å¦å®springbootä¹åçå®æ项ç®ï¼è¯¥é¡¹ç®ç±å·¥åèå¸æ导ä¸ï¼åå端é½ç±æ们个人ç¬ç«å®æç项ç®ã
该项ç®ç¨å°äºï¼html5+css3,mysqlæ°æ®åº,springbootæ¡æ¶,maven,web,javascript,jquery,ajax,echarts,bootstrapçææ¯ã
项ç®ä»å¼å§å°å®ææ们ç¨äºå¤©çæ¶é´ã该项ç®ä¸»è¦æ¯åä¸ä¸ªç½ä¸ååçµåè´ç©å¹³å°ï¼å æ¬ç¨æ·ç»å½æ³¨åï¼ç¨æ·ç»å®ä¿¡æ¯ï¼ä¸ä¼ 头åãæµç§°ç个人信æ¯ï¼
ç¨æ·ä¸»è¦å¯ä»¥å¨è¯¥å¹³å°ä¸é¢è´ä¹°åç§ååï¼æ¯ç§ååé½å好äºå类管çï¼ç¨æ·ç¹å»åç±»å称æè åç¡®æç´¢é½è½æ¾ç¤ºåºèªå·±æ³è¦çååãç¨æ·ç¹å»ååå°±å¯ä»¥
é¾æ¥å°åå详æ 页é¢ï¼ä¸è®ºæ¯è´ç©è¿æ¯æµè§ååé½é常çæ¹ä¾¿ã该项ç®ç¨æ·ç使ç¨æ¹æ³ï¼p1.æ°ç¨æ·è¿è¡ç»å½æ³¨åã/p
p2.ç»å½æååæ°ç¨æ·å¯ä»¥è¿è¡ä¿®æ¹å¯ç ãæµç§°ã头åç个人信æ¯ã/p
p3.ç¨æ·èªç±è´ä¹°åæµè§ååä¿¡æ¯ã/p
该项ç®è®©æ们ä½éªäºspringbootçé 置强大ä¹å¤ï¼æ²¡æç¹ççå¤ä½é ç½®æ件ï¼ææé ç½®é½ç±ä¸ä¸ªé ç½®æ件解å³ï¼ç®åäºæ们smmæ¡æ¶é ç½®ççè¦ã/p
br
h2id="bug"ç¬è«/h2
h5ä¼ä¸saaså·¥å/h5
pç¬è«é¡¹ç®æ¯æ们æè¿æåå®ç项ç®ã该项ç®ä¸ä»¥å¾é¡¹ç®ä¸åï¼è¯¥é¡¹ç®æ¯ç±å·¥åèå¸æ导ä¸ï¼æ们é¦æ¬¡åå端å离åä½ç项ç®ãä¸ä¸ªå¢ä½3个人ï¼åå«åå端å±ç¤ºæ°æ®ï¼å端ç¬åæ°æ®åæ°æ®æ¸ æ´ã
æå¨è¿ä¸ªé¡¹ç®ä¸åçæ¯å端ç¬åæ°æ®ãæç¨å°äºï¼"
meta?ment and edit the following line if your mail needs to be sent out
dnl through an external mail server:
dnl define(`SMART_HOST',`smtp.your.provider')
define(`confDEF_USER_ID',``8:'')dnl
undefine(`UUCP_RELAY')dnl
undefine(`BITNET_RELAY')dnl
dnl define(`confAUTO_REBUILD')dnl
define(`confTO_CONNECT', `1m')dnl
define(`confTRY_NULL_MX_LIST',true)dnl
define(`confDONT_PROBE_INTERFACES',true)dnl
define(`PROCMAIL_MAILER_PATH',`/usr/bin/procmail')dnl
define(`ALIAS_FILE', `/etc/mail/aliases')dnl
define(`STATUS_FILE', `/etc/mail/statistics')dnl
define(`UUCP_MAILER_MAX', `')dnl
define(`confUSERDB_SPEC', `/etc/mail/userdb.db')dnl
define(`confPRIVACY_FLAGS', `authwarnings,novrfy,noexpn,restrictqrun')dnl
define(`confAUTH_OPTIONS', `A')dnl
TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5
LOGIN PLAIN')dnl
dnl define(`confCACERT_PATH',`/usr/share/ssl/certs')
dnl define(`confCACERT',`/usr/share/ssl/certs/ca-bundle.crt')
dnl define(`confSERVER_CERT',`/usr/share/ssl/certs/sendmail.pem')
dnl define(`confSERVER_KEY',`/usr/share/ssl/certs/sendmail.pem')
dnl define(`confTO_QUEUEWARN', `4h')dnl
dnl define(`confTO_QUEUERETURN', `5d')dnl
dnl define(`confQUEUE_LA', `')dnl
dnl define(`confREFUSE_LA', `')dnl
define(`confTO_IDENT', `0')dnl
dnl FEATURE(delay_checks)dnl
FEATURE(`no_default_msa',`dnl')dnl
FEATURE(`smrsh',`/usr/sbin/smrsh')dnl
FEATURE(`mailertable',`hash -o /etc/mail/mailertable.db')dnl
FEATURE(`virtusertable',`hash -o /etc/mail/virtusertable.db')dnl
FEATURE(redirect)dnl
FEATURE(always_add_domain)dnl
FEATURE(use_cw_file)dnl
FEATURE(use_ct_file)dnl
dnl The '-t' option will retry delivery if e.g. the user runs over his quota.
FEATURE(local_procmail,`',`procmail -t -Y -a $h -d $u')dnl
FEATURE(`access_db',`hash -T; -o /etc/mail/access.db')dnl
FEATURE(`blacklist_recipients')dnl
EXPOSED_USER(`root')dnl
dnl This changes sendmailto only listen on the loopback device .0.0.1
dnl and not on any other network devices. Comment this out if you want
dnl to accept email over the network.
DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0, Name=MTA')
dnl NOTE: binding both IPv4 and IPv6 daemon to the same port requires
dnl a kernel patch
dnl DAEMON_OPTIONS(`port=smtp,Addr=::1, Name=MTA-v6, Family=inet6')
dnl We strongly recommend to comment this one out if you want to protect
dnl yourself from spam. However, the laptop and users on computers that do
dnl not have x7 DNS do need this.
FEATURE(`accept_unresolvable_domains')dnl
dnl FEATURE(`relay_based_on_MX')dnl
MAILER(smtp)dnl
MAILER(procmail)dnl
记得要使以下两个条语句有效,他的源码意思是假如access.db访问控制没有配置,则启用以下
验证方式进行smtp验证。源码
TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
define(`confAUTH_MECHANISMS',源码 `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5
LOGIN PLAIN')dnl
sendmail宏定义说明
divert(n) 为m4定义一个缓冲动作,当n=-1时缓冲被删除,源码n=0时开始一个新缓冲
OSTYPE定义宏所使用的源码roid源码架构操作系统,该宏允许m4程式增加同相关操作系统相关的源码
文档
Domain定义MTA将使用哪些域来传输邮件
Feature定义配置文档中使用的一个特定的功能集
Define定义配置文档中的一个特定的选项值
MASQUERADE_AS 定义sendmail来应答邮件的其他主机名
MAILER定义sendmail使用的邮件传输方法
dnl注释
完成sendmail.mc文档的编写后就能够用m4程式生成正式的sendmail.cf配置文档。语法如
下:
# m4 sendmail.mc ; sendmail.cf
也能够用源码目录树下的源码cf/cf/Build命令生成。前提是源码您要在该目录下有一个sendmail.mc
文档。语法如下:
# ./Build sendmail.cf
ok,源码接着就能够把sendmail.cf and submit.cf文档安装到/etc/mail目录中的源码,语法如下:
# ./Build install-cf
其实也能够自已用cp命令拷贝的源码啦。记得把sendmail.mc文档也拷贝一份到/etc/mail目录,源码
以便以后修改配置时可重新生成sendmail.cf文档。源码linux进程调度源码
ok,源码接着到/etc/mail目录下配置一些文档。
# cd /etc/mail
# echo 'examply.com' ;; local-host-names 接收邮件的主机名
# echo 'localhost RELAY' ;; access 用来拒绝或允许来自某个域的邮件,本例允许
本地转发。
# makemap hash access 生成access.db数据库
# touch domaintable 用来把旧域名映射互新域名
# makemap hash domaintable 来覆盖向指定域的路由
# makemap hash mailertable 用来把用户和域名映射到其他地址
# makemap hash virtusertable 别名数据库,文本形式。可参照源码目录树下
sendmail/aliases文档。
# newaliases 从文本文档中创建一个新的别名数据库文档。
# sendmail-v -bi 调试启动。
/etc/mail/aliases: aliases, longest bytes, bytes total
假如出现以上提示信息,则启动成功。可用以下命令正式启动:
# sendmail-bd -qm
该命令以后台进程方式(-bd)运行,并使其每隔分钟(-qm)轮询一次未发送邮件队
列,检查是gps管理系统源码否有新邮件。
服务器启动后,能够用telnet连接服务器。
# telnet localhost
Trying .0.0.1...
Connected to localhost.
Escape character is '^]'.
test.tigerhead ESMTP Sendmail8../8..; Tue, Mar :: +
ehlo test 您输入的命令,按回车结束。
-test.tigerhead Hello LOCALHOST.localdomain [.0.0.1], pleased to meet you
-ENHANCEDSTATUSCODES
-PIPELINING
-8BITMIME
-SIZE
-DSN
-ETRN
-AUTH DIGEST-MD5 CRAM-MD5 LOGIN PLAIN
-DELIVERBY
HELP
以-开头的为服务器的响应信息。注意倒数第三行,这就是成功配置smtp验证的显示。
输入quit离开。
安装完成后为确保系统安全,还需调整一些目录的权限。可参考sendmail源码目录下
sendmail/SECURITY文档。
# chmod /etc/mail/aliases /etc/mail/aliases.{ db,pag,dir}
# chmod /etc/mail/*.{ db,pag,dir}
# chmod /etc/mail/statistics /var/log/sendmail.st
# chmod /var/run/sendmail.pid /etc/mail/sendmail.pid
-r-xr-sr-x root smmsp ... /PATH/TO/sendmail
drwxrwx--- smmsp smmsp ... /var/spool/clientmqueue
drwx------ root wheel ... /var/spool/mqueue
-r--r--r-- root wheel ... /etc/mail/sendmail.cf
-r--r--r-- root wheel ... /etc/mail/submit.cf
6、sendmail功能介绍
aliases 别名数据库配置
test: test1,test2,test3 配置test群组别名,test不是手机应用 网站源码个实际的用户,只是个别名。发给
test的信,test1,2,3都可收到。
test: test,testbak 在testbak邮箱中备份test的邮件。
test: test,test@.com 远程邮件备份,原理同上。
test: :include: /etc/mail/userlist 使用用户列表配置群组。
userlist格式如下:
test1, /
test2, /
test3, /
test4
关于系统预设aliases,由于sendmail预设用mailer-daemon and postmaster作为资料传送者,
或邮件退回的帐号,但系统实际没有这两个帐号,所以要如下配置别名。
mailer-daemon: postmaster
postmaster: root
配置完成后不要忘了用newaliases命令生成数据库。
~/.forward文档配置
其实该文档的换物网站源码作用和aliases数据库的作差不多啦,都是配置别名,做邮件转发的。因为alises
只能由管理员控制,个人用户不能修改,所以就能够在个人的目录下建立一个转寄文档。以
配置个人的邮件转寄列表。文档格式如下:
test
test1
test2
test3
and os on
但由于个人用户安全意识差,假如配置不当会有安全漏洞,不建议使用。
access访问控制列表配置
. RELAY
test.NET OK
test.COM REJECT
test.COM SORRY,WE DON'T ALLOW SPAMMERS HERE
test.ORG DISCARD
Ok--远程主机能够向您的邮件服务器发送邮件;
RELAY--允许中转;
REJECT--不能向您的邮件服务器发邮件和不能中转;
DISCARD--发来的邮件将被丢弃,同时并不向发送者返回错误信息。
nnn text-- 发来的邮件将被丢弃,但sendmail将会向发送者返回nnn确定的smtp代码和text
变量确定的文本描述。
配置完成后要用makemap hash access.db 命令生成数据库。
mailq邮件队列查询命令。
Q-ID邮件id号。
Size邮件容量。
Q-Time邮件进入队列(也就是/var/spool/mqueue目录)的时间和不能邮寄的原因。
Sender/Recipient 发信和收信人的邮箱地址。
mailstats邮寄状态查询命令,可查询sendmail运行作至今邮件收发总计资料。
M :
msgsfr:发送的邮件数量。
bytes_from:邮件容量
megsto:收到邮件的数量。
bytes_to:同上
msgsrej:邮件deny的次数。
msgsdis:邮件discard的次数。
Mailer :esmtp对外邮件 ,local本地邮件 。
mail邮件命令
mail 查看/var/spool/mail/目录下自已邮箱内容。以q退出把看过的邮件保存在
~/mbox中。
mail test@example.com 直接发邮件给人。
mail -s 'title text' test@example.com 把文档中内容邮寄出去。
mail -f ~/mbox查看home目录下邮箱内容。
用mail发附件也是可行,要用到uuencode and uudecode命令进行编码。
编码:uuencode [file] name example:uuencode hello hello;hello.uue default input
is stdin;default output is stdout.
解码:uudecode [-o outfile] name example:uudecode hello.uue 能够用-o选项输出另外一个
文档名。
# uuencode ~/.bashrc bashrc | mail -s 'test uuencode'
test@example.com
五、其他配置。
要想更好的使用sendmail,常用到的一些配置:
1、限制最大邮件。
vi /etc/sendmail.cf
# maximum message size
O MaxMessageSize= (注:5M)
2、最大的群发数目。
vi /etc/sendmail.cf
# maximum number of recipients per SMTP envelope
O MaxRecipientsPerMessage= (注:个)
3、域名文档----local-host-name
能够用他来实现虚拟域名或多域名支持。
/etc/mail/local-host-name
v1mail.com
v2mail.com
.......
4、mail别名文档--aliases。
vi /etc/aliases
系统内部别名:peng:zpeng,hero,mmmn,yt peng是我的用户名,其他的是别名,用逗号隔开。
转发到其他的邮箱:peng:zpeng@sina.com,yt.sohu.com
#newaliases --写到库中
5、邮件控制文档--access
relay、ok、reject和discard。relay能够实现转发。ok是用来允许用户的任意访问,他会覆盖任何其他已建立的检查(实际配置中,最好别设这项,除非您对该用户是绝对信任的);reject能够实现对来访地址的拒绝,他根本就不容许该地址和您的邮件服务器进行连接通信;discard的作用是在接收到传输的邮件消息后,偷偷地把他丢弃掉(在发送者看来,他的邮件的确是接收了,但他并不知道,发送的目的地址根本不可能接收到他的邮件,服务器巧妙地欺骗了他。
vi /etc/mail/access.
localhost.localdomain RELAY ---允许
localhostRELAY
.0.0.1 RELAY
peng@sina.com ok
@sexgirl.net reject
... discard
#makemap hash access.db 写入库中
6、虚拟用户文档---virtusertable.
这个文档能够mail重名问题。
例如:您有两个域名,virt1.com and virt2.com,但是都有peng这个用户:
peng@virt1.com and peng@virt2.com,这是两个用户。但对于系统用户来说,他只认系统用户peng,只能通过一下改:
vi /etc/mail/virtusertable
peng@virt2.com r
这样就能够了。在新开一个用户r,但是peng@virt2.com在客户端的pop3 and smtp server的用户名和口令要用r的。
#makemap hask virtusertable.db
# /usr/sbin/sendmail -d0.1 -bv root |grep SASL
NAMED_BIND NETINET NETINET6 NETUNIX NEWDB NIS QUEUE SASL SCANF
我的问题已找到了是/usr/lib/sasl/Sendmail.conf的文档名中的S没有大写,问题已解决
2024-11-27 20:521008人浏览
2024-11-27 19:252771人浏览
2024-11-27 18:452839人浏览
2024-11-27 18:38649人浏览
2024-11-27 18:181470人浏览
2024-11-27 18:143000人浏览
1.物联网操作系统的特点有哪些?2.ä½ä¸ºPHPï¼3.stop;oxoooofe(oxooooooo2,ox882ef008,0x88319e28,ox87f6f8bo)4.我想要www..
1.通达信如何导入主、幅公式源代码,小白看过来免费教程)2.主力龙头狙-击主力进出套装指标公式通达信源码,擒牛胜率85%,无未来函数3.我想把两个附图公式和 MA2六条均线组合成一个主图指标!希望您能
1.电子宠物大作战在哪玩介绍_电子宠物大作战在哪玩是什么2.AI虚拟宠物养成小程序:一个新颖的心理舒缓方式电子宠物大作战在哪玩介绍_电子宠物大作战在哪玩是什么 对于想体验电子宠物乐趣的微信用户,无