Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 日韩免费精品,成人免费观看国产高清,最近最新中文字幕大全2019免费视频

          整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          Python發送郵件(三十)

          單郵件傳輸協議(SMTP)是一種協議,用于在郵件服務器之間發送電子郵件和路由電子郵件。

          Python提供smtplib模塊,該模塊定義了一個SMTP客戶端會話對象,可用于使用SMTP或ESMTP偵聽器守護程序向任何互聯網機器發送郵件。

          這是一個簡單的語法,用來創建一個SMTP對象,稍后將演示如何用它來發送電子郵件 -

          import smtplib
          smtpObj = smtplib.SMTP( [host [, port [, local_hostname]]] )
          

          這里是上面語法的參數細節 -

          • host - 這是運行SMTP服務器的主機。可以指定主機的IP地址或類似felix.com的域名。這是一個可選參數。
          • port - 如果提供主機參數,則需要指定SMTP服務器正在偵聽的端口。通常這個端口默認值是:25。
          • local_hostname - 如果SMTP服務器在本地計算機上運行,那么可以只指定localhost選項。

          SMTP對象有一個sendmail的實例方法,該方法通常用于執行郵件發送的工作。它需要三個參數 -

          • sender - 具有發件人地址的字符串。
          • receivers - 字符串列表,每個收件人一個。
          • message - 作為格式如在各種RFC中指定的字符串。

          1.使用Python發送純文本電子郵件

          示例

          以下是使用Python腳本發送一封電子郵件的簡單方法 -

          #!/usr/bin/python3
          import smtplib
          sender = 'from@fromdomain.com'
          receivers = ['to@todomain.com']
          message = """From: From Person <from@fromdomain.com>
          To: To Person <to@todomain.com>
          Subject: SMTP e-mail test
          This is a test e-mail message.
          """
          try:
           smtpObj = smtplib.SMTP('localhost')
           smtpObj.sendmail(sender, receivers, message) 
           print "Successfully sent email"
          except SMTPException:
           print "Error: unable to send email"
          

          在這里,已經發送了一封基本的電子郵件,使用三重引號,請注意正確格式化標題。一封電子郵件需要一個From,To和一個Subject標題,與電子郵件的正文與空白行分開。

          要發送郵件,使用smtpObj連接到本地機器上的SMTP服務器。 然后使用sendmail方法以及消息,從地址和目標地址作為參數(即使來自和地址在電子郵件本身內,這些并不總是用于路由郵件)。

          如果沒有在本地計算機上運行SMTP服務器,則可以使用smtplib客戶端與遠程SMTP服務器進行通信。除非您使用網絡郵件服務(如gmail或Yahoo! Mail),否則您的電子郵件提供商必須向您提供可以提供的郵件服務器詳細信息。以騰訊QQ郵箱為例,具體如下:

          mail = smtplib.SMTP('smtp.qq.com', 587) # 端口465或587
          

          2.使用Python發送HTML電子郵件

          當使用Python發送郵件信息時,所有內容都被視為簡單文本。 即使在短信中包含HTML標簽,它也將顯示為簡單的文本,HTML標簽將不會根據HTML語法進行格式化。 但是,Python提供了將HTML消息作為HTML消息發送的選項。

          發送電子郵件時,可以指定一個Mime版本,內容類型和發送HTML電子郵件的字符集。

          以下是將HTML內容作為電子郵件發送的示例 -

          #!/usr/bin/python3
          import smtplib
          message = """From: From Person <from@fromdomain.com>
          To: To Person <to@todomain.com>
          MIME-Version: 1.0
          Content-type: text/html
          Subject: SMTP HTML e-mail test
          This is an e-mail message to be sent in HTML format
          <b>This is HTML message.</b>
          <h1>This is headline.</h1>
          """
          try:
           smtpObj = smtplib.SMTP('localhost')
           smtpObj.sendmail(sender, receivers, message) 
           print "Successfully sent email"
          except SMTPException:
           print "Error: unable to send email"
          

          3.發送附件作為電子郵件

          要發送具有混合內容的電子郵件,需要將Content-type標題設置為multipart / mixed。 然后,可以在邊界內指定文本和附件部分。

          一個邊界以兩個連字符開始,后跟一個唯一的編號,不能出現在電子郵件的消息部分。 表示電子郵件最終部分的最后一個邊界也必須以兩個連字符結尾。

          所附的文件應該用包(“m”)功能編碼,以便在傳輸之前具有基本的64編碼。

          4.發送示例

          首先我們要知道用python代理登錄qq郵箱發郵件,是需要更改自己qq郵箱設置的。在這里大家需要做兩件事情:郵箱開啟SMTP功能 、獲得授權碼。之后我們來看看如何更改模板代碼,實現使用Python登錄QQ郵箱發送QQ郵件。

          注意:也可以使用其他服務商的 SMTP 訪問(QQ、網易、Gmail等)。

          使用QQ郵件發送郵件之前如何設置授權碼,參考:

          http://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1001256

          4.1.發送一純文本郵件到指定郵件

          #! /usr/bin/env python
          #coding=utf-8
          from email.mime.text import MIMEText
          from email.header import Header
          from smtplib import SMTP_SSL
          #qq郵箱smtp服務器
          host_server = 'smtp.qq.com'
          #sender_qq為發件人的qq號碼
          sender_qq = '123123123@qq.com'
          #pwd為qq郵箱的授權碼
          pwd = '****kenbb***' ## xh**********bdc
          #發件人的郵箱
          sender_qq_mail = '123123123@qq.com'
          #收件人郵箱
          receiver = 'felix.com@gmail.com'
          #郵件的正文內容
          mail_content = '你好,這是使用python登錄qq郵箱發郵件的測試'
          #郵件標題
          mail_title = 'Maxsu的郵件'
          #ssl登錄
          smtp = SMTP_SSL(host_server)
          #set_debuglevel()是用來調試的。參數值為1表示開啟調試模式,參數值為0關閉調試模式
          smtp.set_debuglevel(1)
          smtp.ehlo(host_server)
          smtp.login(sender_qq, pwd)
          msg = MIMEText(mail_content, "plain", 'utf-8')
          msg["Subject"] = Header(mail_title, 'utf-8')
          msg["From"] = sender_qq_mail
          msg["To"] = receiver
          smtp.sendmail(sender_qq_mail, receiver, msg.as_string())
          smtp.quit()
          

          執行上面代碼后,登錄接收郵件的郵件帳號,這里接收郵件的賬號為:felix.com@gmail.com,登錄 http://gmail.com 應該會看到有接收到郵件如下 -

          錄內容

          目錄內容 2

          0. 修改記錄 3

          1. 短信概念 4

          2. 短信分類 5

          2.1. TEXT短信 5

          2.2. PDU短信 5

          3. 短信應用 6

          3.1. 發送短信 6

          3.1.1. TEXT短信方式 6

          3.1.2. PDU短信方式 6

          3.2. 編寫短信 7

          3.2.1. TEXT短信方式 7

          3.2.2. PDU短信方式 7

          3.3. 轉發短信 8

          3.4. 讀取短信 9

          3.4.1. TEXT短信方式 9

          3.4.2. PDU短信方式 9

          3.5. 刪除短信 10

          3.5.1. TEXT短信方式 10

          3.5.2. PDU短信方式 11

          4. PDU串分類及結構 12

          4.1. SUBMIT-PDU 12

          4.1.1. 結構 12

          4.1.2. 說明 12

          4.1.3. 舉例分析 15

          4.2. DELIVER-PDU 16

          4.2.1. 結構 17

          4.2.2. 說明 17

          4.2.3. 舉例分析 19

          5. 短信工作過程 22

          5.1. 設備之間的交互過程 22

          5.2. 平臺的消息處理過程 23

          5.2.1. 發送短信 23

          5.2.2. 接收短信 23

          0. 修改記錄

          版本

          日期

          作者

          修改內容記錄

          1.0

          2012-08-10

          Vicent.Gao

          初始版本,講述了短信的基本操作,及PDU串的結構

          2.0

          2012-08-17

          Vicent.Gao

          加入新的一章:第5章 “短信工作過程”

          1. 短信概念

          短消息,即SMS,英文全稱short message service,是一種使用手機發送和接收有限長度文本信息的通訊服務;

          更加詳細的介紹,請查看鏈接:

          http://www.jl.10086.cn/whatsnew/newrelease/duanxin.html

          2. 短信分類

          在用戶使用的角度看,短信共分為2類,分別是TEXT短信、PDU短信。

          在寫短信、發送短信時,可以選擇使用TEXT短信方式,也可以選擇使用PDU短信方式;

          在讀取短信時,可以選擇使用TEXT短信方式,也可以使用PDU短信方式;

          編寫的短信、接收的短信,實際是以PDU短信方式存儲在ME或SM中;

          在發送短信時,實際是以PDU短信方式發往SCA,再由SCA轉發至對方手機;

          2.1 TEXT短信

          以可讀的方式,編寫、發送、讀取短信。在編寫短信、發送短信時,需要內部轉換成PDU模式,才能進行存儲、發送。

          如:

          AT+CMGR=1

          +CMGR: "REC UNREAD","+8615055135325","","2012/08/10 10:56:08+32"

          0123456789

          OK

          2.2 PDU短信

          根據指定的PDU格式,填充必要的域,如<SCA>, <FO>,<DCS>等,不需要內部進行轉換,可以直接進行存儲或發送。也可以使用PDU短信方式,讀取編寫和接收的短信。

          如:

          AT+CMGR=1

          +CMGR: 1,,29

          0891683108501505F0040D91685150155323F50000218001016580230AB0986C46ABD96EB81C

          OK

          3. 短信應用

          客戶在使用短信功能時,可以完成發送短信、編寫短信、轉發短信、讀取短信、刪除短信的操作。

          3.1 發送短信

          3.1.1 TEXT短信方式

          AT+CMGF=1 //設置使用TEXT短信方式

          OK

          AT+CSCS="GSM" //設置編輯短信時,使用的字符集

          OK

          AT+CMGS="15055135325" //使用CMGS發送短信給自身,此處需要填寫DA,即目標地址

          > 0123456789 //按<CTRL+Z>開始發送短信

          +CMGS: 28 //短信已發送,MR=28,其中MR為Messge Reference,用來唯一標識一條短信

          OK //短信發送成功

          +CMTI: "SM",1 //接收到的短信,存儲在SM中,索引號為1的位置上

          參考的QCOM Script,請見壓縮包路徑:

          QCOM_Script\CMGS\CMGS_TEXT.ini

          3.1.2 PDU短信方式

          AT+CMGF=0 //設置使用PDU短信方式

          OK

          AT+CMGS=24 //使用CMGS發送短信給自身,此處需要填寫TPDU串的長度,即PDU串中除去SCA域之后的數據長度,以Byte為單位

          > 0891683108501505F011000D91685150155323F500000A0AB0986C46ABD96EB81C //按<CTRL+Z>開始發送短信

          +CMGS: 29 //短信已發送,MR=29,其中MR為Messge Reference,用來唯一標識一條短信

          OK //短信發送成功

          +CMTI: "SM",2 //接收到的短信,存儲在SM中,索引號為2的位置上

          參考的QCOM Script,請見壓縮包路徑:

          QCOM_Script\CMGS\CMGS_PDU.ini

          3.2 編寫短信

          3.2.1 TEXT短信方式

          AT+CMGF=1 //設置使用TEXT短信方式

          OK

          AT+CSCS="GSM" //設置編輯短信時,使用的字符集

          OK

          AT+CMGW //使用CMGW編寫短信,沒有指明DA,即目標地址,也可以在命令中指明

          > 0123456789 //按<CTRL+Z>開始存儲短信

          +CMGW: 5 //編寫的短信,存儲在索引號為5的位置上

          OK //編寫短信成功

          參考的QCOM Script,請見壓縮包路徑:

          QCOM_Script\CMGW\CMGW_TEXT.ini

          3.2.2 PDU短信方式

          AT+CMGF=0 //設置使用PDU短信方式

          OK

          AT+CMGW=17 //使用CMGW編寫短信,此處需要填寫TPDU串的長度,即PDU串中除去SCA域之后的數據長度,以Byte為單位

          > 0011FF00000000470AB0986C46ABD96EB81C //按<CTRL+Z>開始存儲短信

          +CMGW: 7 //編寫的短信,存儲在索引號為7的位置上

          OK //編寫短信成功

          參考的QCOM Script,請見壓縮包路徑:

          QCOM_Script\CMGW\CMGW_PDU.ini

          3.3 轉發短信

          需要指明短信存儲時使用的索引號,才能完成轉發操作。由于短信在存儲時,都是以PDU短信方式來進行存儲的,所以此命令與使用的短信方式(TEXT或PDU)無關。

          AT+CMGF=0 //設置使用TEXT短信方式

          OK

          AT+CSCS="GSM" //設置編輯短信時,使用的字符集

          OK

          AT+CMSS=7,"15055135325" //使用CMSS轉發短信給自身,此短信存儲在索引號為7的位置上,此處指明了DA,即目標地址

          +CMSS: 30 //短信已發送,MR=29,其中MR為Messge Reference,用來唯一標識一條短信

          OK //短信發送成功

          +CMTI: "SM",9 //接收到的短信,存儲在SM中,索引號為9的位置上

          AT+CMGF=1 //設置使用PDU短信方式

          OK

          AT+CSCS="GSM" //設置編輯短信時,使用的字符集

          OK

          AT+CMSS=7,"15055135325" //使用CMSS轉發短信給自身,此短信存儲在索引號為7的位置上,此處指明了DA,即目標地址

          +CMSS: 31 //短信已發送,MR=29,其中MR為Messge Reference,用來唯一標識一條短信

          OK //短信發送成功

          +CMTI: "SM",10 //接收到的短信,存儲在SM中,索引號為10的位置上

          注:

          在TEXT短信方式、PDU短信方式下,轉發同一條短信,都可以成功發送,則說明CMSS轉發短信與具體采用的短信方式(使用CMGF命令設置)無關。

          參考的QCOM Script,請見壓縮包路徑:

          QCOM_Script\CMSS\CMSS.ini

          3.4 讀取短信

          使用CMGD讀取單條短信,使用CMGL讀取某一類別的短信。

          3.4.1 TEXT短信方式

          AT+CMGF=1 //設置使用TEXT短信方式

          OK

          AT+CMGR=1 //使用CMGR命令,讀取索引號1位置上的短信

          +CMGR: "REC UNREAD","+8615055135325","","2012/08/10 10:56:08+32"

          0123456789 //在TEXT短信方式下,列出的短信內容

          OK

          AT+CMGL=? //使用CMGL讀取指定類別的短信,在TEXT短信方式下,查詢CMGL命令的用法

          +CMGL: ("REC UNREAD","REC READ","STO UNSENT","STO SENT","ALL") //在TEXT短信方式下,使用String方式來指明要讀取短信的類別

          OK

          AT+CMGL="STO UNSENT" //顯示所有未發送的短信

          +CMGL: 3,"STO UNSENT","","", //第1條未發送短信,存儲在索引號3位置上

          0123456789

          +CMGL: 4,"STO UNSENT","15055135325","", //第2條未發送短信,存儲在索引號4位置上

          0123456789

          +CMGL: 5,"STO UNSENT","","", //第3條未發送短信,存儲在索引號5位置上

          0123456789

          +CMGL: 6,"STO UNSENT","","", //第4條未發送短信,存儲在索引號6位置上

          0123456789

          OK

          參考的QCOM Script,請見壓縮包路徑:

          QCOM_Script\CMGR+CMGL\CMGR+CMGL_TEXT.ini

          3.4.2 PDU短信方式

          AT+CMGF=0 //設置使用PDU短信方式

          OK

          AT+CMGR=1 //使用CMGR命令,讀取索引號1位置上的短信

          +CMGR: 1,,29

          0891683108501505F0040D91685150155323F50000218001016580230AB0986C46ABD96EB81C //在PDU短信方式下,列出的短信內容

          OK

          AT+CMGL=? //使用CMGL讀取指定類別的短信,在PDU短信方式下,查詢CMGL命令的用法

          +CMGL: (0-4) //在PDU短信方式下,使用Integer方式來指明要讀取短信的類別

          OK

          AT+CMGL=2 //顯示所有未發送的短信

          +CMGL: 3,2,,17 //第1條未發送短信,存儲在索引號3位置上

          0011FF00000000470AB0986C46ABD96EB81C

          +CMGL: 4,2,,23 //第2條未發送短信,存儲在索引號4位置上

          0011FF0B815150155323F50000470AB0986C46ABD96EB81C

          +CMGL: 5,2,,17 //第3條未發送短信,存儲在索引號5位置上

          0011FF00000000470AB0986C46ABD96EB81C

          +CMGL: 6,2,,17 //第4條未發送短信,存儲在索引號6位置上

          0011FF00000000470AB0986C46ABD96EB81C

          OK

          參考的QCOM Script,請見壓縮包路徑:

          QCOM_Script\CMGR+CMGL\CMGR+CMGL_PDU.ini

          3.5 刪除短信

          在刪除短信時,建議使用CMGD刪除單條命令,使用QMGDA刪除指定類別的短信。當然,使用CMGD命令的<delflag>參數,也可以刪除指定類別的短信。

          3.5.1 TEXT短信方式

          AT+CMGF=1 //設置使用TEXT短信方式

          OK

          AT+CMGD=1 //使用CMGD刪除索引號1位置上的短信

          OK

          AT+QMGDA=? //使用QMGDA刪除某一類別的短信,在TEXT短信方式下,查詢QMGDA命令的用法

          +QMGDA:("DEL READ","DEL UNREAD","DEL SENT","DEL UNSENT","DEL INBOX","DEL ALL") //在TEXT短信方式下,使用String方式來指明要刪除短信的類別

          OK

          AT+QMGDA="DEL READ" //刪除所有已讀短信

          OK

          參考的QCOM Script,請見壓縮包路徑:

          QCOM_Script\CMGD+QMGDA\CMGD+QMGDA_TEXT.ini

          3.5.2 PDU短信方式

          AT+CMGF=0 //設置使用PDU短信方式

          OK

          AT+CMGD=1 //使用CMGD刪除索引號1位置上的短信

          OK

          AT+QMGDA=? //使用QMGDA刪除某一類別的短信,在PDU短信方式下,查詢QMGDA命令的用法

          +QMGDA:(1-6) //在PDU短信方式下,使用Integer方式來指明要刪除短信的類別

          OK

          AT+QMGDA=1 //刪除所有已讀短信

          OK

          參考的QCOM Script,請見壓縮包路徑:

          QCOM_Script\CMGD+QMGDA\CMGD+QMGDA_PDU.ini

          4. PDU串分類及結構

          在使用PDU短信方式,進行短信的發送、編寫、讀取時,對于PDU串結構的了解是很有必要的。

          PDU串共有2類,分別是SUBMIT-PDU,DELIVER-PDU,各有不同的結構。

          4.1 SUBMIT-PDU

          SUBMIT-PDU,是發送短信時采用的PDU串。

          SUBMIT-PDU

          SCA

          TPDU




          DA






          Len

          Type

          Addr

          FO

          MR

          Len

          Type

          Addr

          PID

          DCS

          VP

          UDL

          UD

          P1

          P2

          P3

          P4

          P5

          P6

          P7

          P8

          P9

          P10

          P11

          P12

          P13

          1

          0~1

          0~10

          1

          1

          1

          1

          0~10

          1

          1

          1

          1

          0~140

          1 ~ 12



          2~12






          4.1.1 結構

          注:

          表中的第1行為 表頭部分,說明表所要表達的內容;

          表中的第2行為 PDU串結構中,包含有2大部分;

          表中的第3行為 PDU串結構中,TPDU部分中再劃分的結構;

          表中的第4行為 PDU串結構中,細分的每個部分;

          表中的第5行為 對PDU串結構中,細分的每個部分,進行重新編碼,方便后續的描述;

          表中的第6行為 PDU串結構中,細分的每個部分,編碼時占用的字節數范圍;

          表中的第7行為 PDU串結構中,包含的地址區域,編碼時占用的字節數范圍;

          4.1.2 說明

          • P1

          P1區域屬于SCA域的一部分,固定占有1個字節,表示SCA域的長度,實際上表示的是P2區域和P3區域共同占有的字節數。

          當P1=0x00時,表示SCA域不存在,此時平臺會從CSCA命令中,讀取需要的短信服務中心號碼。

          • P2

          P2區域屬于SCA域的一部分,當P1=0x00時,P2區域將不存在;當P1!=0x00時,P2 區域存在,并固定占有1字節大小;

          P2區域,用于表示短信服務中心號碼的類型,可能取得值有:0x91(國際型),0x81(未知類型),0xA1(國內型)。

          • P3

          P3區域屬于SCA域的一部分,當P1=0x00時,P3區域將不存在;當P1!=0x00時,P3 區域存在,其占有的字節數為:P1 – 1。

          P3區域,用于存儲短信服務中心的號碼,此號碼采用BCD編碼

          • P4

          P4區域固定占有1個字節,為TPDU域的第1個字節,即First Octet。P4區域用于設置PDU串的類型,及其他重要參數。

          其結構如下表:

          SUBMIT-PDU FO (First Octet)

          7

          6

          5

          4

          3

          2

          1

          0

          RP

          UDHI

          SRR

          VPF

          VPF

          RD

          MTI

          MTI

          說明如下:

          • MTI 2bit消息類型00收01發
          • RD 1bit重復信元丟棄0通知服務中心碰到同源同目的地同樣的MR短消息序號的短消息接受1拋棄此時將在短消息提交報告中返回一個適當的FCS值
          • VPF 2bit有效期限格式00 VP不存在10 VP區存在用一個字節表示是相對值01 保留11 存在半個字節表示絕對值
          • SRR 1bit狀態報告要求.
          • UDHI 1bit用戶數據頭標示0用戶數據沒有頭信息1有一般為0
          • RP 1bit是否有回復路徑的標示1有0沒有一般為0

          [Vicent.Gao]:后續會對此段內容,針對平臺中的代碼,進行更加詳細的描述。

          • P5

          P5區域固定占有1個字節,為Message Reference,用于唯一標識一條短信。

          • P6

          P6區域屬于DA域的一部分,固定占有1個字節,表示DA域的長度,實際上表示的是P8區域含有的BCD碼字符的個數

          • P7

          P7區域屬于DA域的一部分,固定占有1個字節,表示目標地址的類型,可能取得值有:0x91(國際型),0x81(未知類型),0xA1(國內型)。

          • P8

          P8區域屬于DA域的一部分,當P6=0x00時,P8區域將不存在;當P6!=0x00時,P8區域存在,其占有的字節數為:P6 / 2。P8區域用于存儲目的地址號碼。

          • P9

          P9區域固定占有1個字節,為Protocol Identifier,用于標識一條短信的種類,為文本短信,還是為其他的短信,如Voice Telephone, E-Mail SMS,一般設置為0x00即可。

          • P10

          P10區域固定占有1個字節,為Data Coding Scheme,表示短信內容采用的編碼,及短信的類別(Message Class)。

          其結構如下表:

          DCS (Data Coding Scheme)

          7

          6

          5

          4

          3

          2

          1

          0

          -

          -

          Bit5

          Bit4

          Bit3

          Bit2

          Bit1

          Bit0

          說明如下:

          • Bit7 Bit6

          一般設置為00

          • Bit5

          文本是否壓縮,0表示未壓縮,1表示采用GSM標準壓縮。

          • Bit4

          是否指定短消息類別,0表示沒有指定,1表示已指定。

          • Bit3 Bit2

          指定短信內容采用的編碼,00表示默認字母表,01表示8bit數據,10表示UCS編碼,11表示保留。

          • Bit1 Bit0

          指定短消息類別,00表示Class 0,01表示Class 1,10表示Class 2,11表示Class 3。

          其中:

          Class 0,直接顯示到用戶終端;

          Class 1,短消息存儲在SIM卡上;

          Class 2,短消息必須存儲在SIM卡上禁止直接傳輸到終端;

          Class 3,短消息存貯在用戶設備上;

          平臺解碼方法:

          smsal_decode_dcs

          • P11

          P11區域,固定占有1個字節,即Validiy Period,用于表示短信服務中心在收到短信后,最長可以暫存的時間,過了有效時間之后,如果這條短信仍然沒有被短信服務中心轉發出去,那么將會被短信服務中心丟棄。

          有效時間,分為2種格式,相對格式和絕對格式,一般都采用相對格式。

          相對格式的有效時間計算方法如表:

          VP

          計算方法

          00 – 8F

          (VP+1)*5 分鐘 從 5 分鐘間隔到 12 個小時

          90 – A7

          12 小時 + (VP – 143)*30 分鐘

          A8 – C4

          (VP – 166) * 1 天

          C5 – FF

          (VP – 192) * 1 周

          • P12

          P12區域,固定占有1個字節,即User Data Length,表示用戶數據長度。

          當短信內容采用GSM-7bit編碼時,其表示P13區域含有的有效字符的個數;

          當短信內容采用其他編碼時,如UCS2,其表示P13區域含有的字節數;

          • P13

          當P12=0x00時,P13區域不存在;當P12!=0x00時,P13區域存在,用于存儲用戶實際發送的短信內容。

          P13區域最大只有140字節的空間可供利用,當短信內容采用GSM-7bit編碼時,其最大可以存儲140 + 140 / 7 = 160個字符;當短信內容采用UCS2編碼時,其最大可以存儲140 / 2 = 70個字符,如漢字字符。

          4.1.3 舉例分析

          SUBMIT-PDU串如下:

          0891683108501505F011000D91685150155323F500000A0AB0986C46ABD96EB81C

          拆分如下:

          08 91 683108501505F0 11 00 0D 91 685150155323F5 00 00 0A 0A B0986C46ABD96EB81C

          08 91 683108501505F0 11 00 0D 91 685150155323F5 00 00 AA 0A B0986C46ABD96EB81C

          如表:

          P1/SCA Len

          P2/SCA Type

          P3/SCA Addr

          P4/FO

          P5/MR

          08

          91

          683108501505F0

          11

          00

          P6/DA Len

          P7/DA Type

          P8/DA Addr

          P9/PID

          P10/DCS

          0D

          91

          685150155323F5

          00

          00

          P11/VP

          P12/UDL

          P13/UD



          0A

          0A

          B0986C46ABD96EB81C



          分析結果:

          • P1

          內容:08

          解析:SCA域長度為8個字節,即P2區域和P3區域總共的區域有8個字節,其中P2區域固定占用1個字節,P3區域占用7個字節。

          • P2

          內容:91

          解析:短信服務中心號碼為國際型。

          • P3

          內容:683108501505F0

          解析:短信服務中心號碼為:8613800551500

          • P4

          內容:11

          解析:此PDU類型為SUBMIT-PDU,采用相對有效期格式。

          • P5

          內容:00

          解析:Messge Reference,即短消息發送參考號,采用默認值00。

          • P6

          內容:0D

          解析:DA域長度為0D/02=7個字節,含有0D=14個BCD碼字符,即P8區域占有7個字節,含有14個BCD碼字符。

          • P7

          內容:91

          解析:目的地址號碼類型為國際型。

          • P8

          內容:685150155323F5

          解析:目的地址號碼為:8615055135325

          • P9

          內容:00

          解析:Protocol Identifier,采用默認值00,即普通文本短消息。

          • P10

          內容:00

          解析:Data Coding Scheme,采用默認值00,即GSM-7bit編碼,Class 1類型。

          • P11

          內容:0A

          解析:短消息在短信服務中心存儲的有效時間為:(0A + 1) * 5 = 55分鐘。

          • P12

          內容:0A

          解析:由于采用GSM-7bit編碼,所以此處表示P13區域內含有10個字符

          • P13

          內容:B0986C46ABD96EB81C

          解析:通過對GSM-7bit編碼內容進行解碼,得知短信內容為:0123456789

          4.2 DELIVER-PDU

          DELIVER-PDU,是接收到的短信采用的PDU串。

          4.2.1 結構

          DELIVER-PDU

          SCA

          TPDU



          OA






          Len

          Type

          Addr

          FO

          Len

          Type

          Addr

          PID

          DCS

          SCST

          UDL

          UD

          P1

          P2

          P3

          P4

          P5

          P6

          P7

          P8

          P9

          P10

          P11

          P12

          1

          1

          6~10

          1

          1

          1

          6~10

          1

          1

          7

          1

          0~140

          8~ 12


          8~12






          注:

          表中的第1行為 表頭部分,說明表所要表達的內容;

          表中的第2行為 PDU串結構中,包含有2大部分;

          表中的第3行為 PDU串結構中,TPDU部分中再劃分的結構;

          表中的第4行為 PDU串結構中,細分的每個部分;

          表中的第5行為 對PDU串結構中,細分的每個部分,進行重新編碼,方便后續的描述;

          表中的第6行為 PDU串結構中,細分的每個部分,編碼時占用的字節數范圍;

          表中的第7行為 PDU串結構中,包含的地址區域,編碼時占用的字節數范圍;

          4.2.2 說明

          • P1

          P1區域屬于SCA域的一部分,固定占有1個字節,表示SCA域的長度,實際上表示的是P2區域和P3區域共同占有的字節數。

          • P2

          P2區域屬于SCA域的一部分,固定占有1個字節,用于表示短信服務中心號碼的類型,可能取得值有:0x91(國際型),0x81(未知類型),0xA1(國內型)。

          • P3

          P3區域屬于SCA域的一部分,其占有的字節數為:P1 – 1,用于存儲短信服務中心的號碼,此號碼采用BCD編碼

          • P4

          P4區域固定占有1個字節,為TPDU域的第1個字節,即First Octet。P4區域用于設置PDU串的類型,及其他重要參數。

          其結構如下表:

          DELIVER-PDU FO (First Octet)

          7

          6

          5

          4

          3

          2

          1

          0

          RP

          UDHI

          SRI

          -

          -

          MMS

          MTI

          MTI

          說明如下:

          • MTI 2bit消息類型00收01發
          • MMS 1bit短消息服務中心是否有更多短消息等待移動臺1有0無默認為1
          • SRI 1bit狀態報告標示0不需要狀態返回到移動設備1需要默認為0
          • UDHI 1bit用戶數據頭標示0用戶數據沒有頭信息1有一般為0
          • RP 1bit是否有回復路徑的標示1有0沒有一般為0

          [Vicent.Gao]:后續會對此段內容,針對平臺中的代碼,進行更加詳細的描述。

          • P5

          P5區域屬于OA域的一部分,固定占有1個字節,表示DA域的長度,實際上表示的是P7區域含有的BCD碼字符的個數。

          • P6

          P6區域屬于DA域的一部分,固定占有1個字節,表示目標地址的類型,可能取得值有:0x91(國際型),0x81(未知類型),0xA1(國內型)。

          • P7

          P7區域屬于DA域的一部分,其占有的字節數為:P5 / 2,用于存儲發送方的號碼。

          • P8

          P8區域固定占有1個字節,為Protocol Identifier,用于標識一條短信的種類,為文本短信,還是為其他的短信,如Voice Telephone, E-Mail SMS,一般都為0x00,即普通文本短信。

          • P9

          P9區域固定占有1個字節,為Data Coding Scheme,表示短信內容采用的編碼,及短信的類別(Message Class)。

          其結構如下表

          DCS (Data Coding Scheme)

          7

          6

          5

          4

          3

          2

          1

          0

          -

          -

          Bit5

          Bit4

          Bit3

          Bit2

          Bit1

          Bit0

          說明如下:

          • Bit7 Bit6

          一般設置為00

          • Bit5

          文本是否壓縮,0表示未壓縮,1表示采用GSM標準壓縮。

          • Bit4

          是否指定短消息類別,0表示沒有指定,1表示已指定。

          • Bit3 Bit2

          指定短信內容采用的編碼,00表示默認字母表,01表示8bit數據,10表示UCS編碼,11表示保留。

          • Bit1 Bit0

          指定短消息類別,00表示Class 0,01表示Class 1,10表示Class 2,11表示Class 3。

          其中:

          Class 0,直接顯示到用戶終端;

          Class 1,短消息存儲在SIM卡上;

          Class 2,短消息必須存儲在SIM卡上禁止直接傳輸到終端;

          Class 3,短消息存貯在用戶設備上;

          平臺解碼方法:

          smsal_decode_dcs

          • P10

          P10區域固定占有7個字節,即Serive Center Time Stamp,用于存儲SCA轉發該條短信的時間戳。

          其結構如下表:

          SCTS

          1

          2

          3

          4

          5

          6

          7

          時區

          說明如下:

          假設P10區域為:21800101658023,再拆分成:21 80 01 01 65 80 23,則表示SCTS為:12年 08月 10日 10時 56分 08秒 32時區

          • P11

          P11區域,固定占有1個字節,即User Data Length,表示用戶數據長度。

          當短信內容采用GSM-7bit編碼時,其表示P12區域含有的有效字符的個數;

          當短信內容采用其他編碼時,如UCS2,其表示P12區域含有的字節數;

          • P12

          當P11=0x00時,P12區域不存在;當P11!=0x00時,P12區域存在,用于存儲用戶實際發送的短信內容。

          P12區域最大只有140字節的空間可供利用,當短信內容采用GSM-7bit編碼時,其最大可以存儲140 + 140 / 7 = 160個字符;當短信內容采用UCS2編碼時,其最大可以存儲140 / 2 = 70個字符,如漢字字符。

          4.2.3 舉例分析

          DELIVER-PDU串如下:

          0891683108501505F0040D91685150155323F50000218001016580230AB0986C46ABD96EB81C

          拆分如下:

          08 91 683108501505F0 04 0D 91 685150155323F5 00 00 21800101658023 0A B0986C46ABD96EB81C

          如表:

          P1/SCA Len

          P2/SCA Type

          P3/SCA Addr

          P4/FO

          P5/OA Len

          08

          91

          683108501505F0

          04

          0D

          P6/OA Type

          P7/OA Addr

          P8/PID

          P9/DCS

          P10/SCTS

          91

          685150155323F5

          00

          00

          21800101658023

          P11/UDL

          P12/UD




          0A

          B0986C46ABD96EB81C




          分析結果:

          • P1

          內容:08

          解析:SCA域長度為8個字節,即P2區域和P3區域總共的區域有8個字節,其中P2區域固定占用1個字節,P3區域占用7個字節。

          • P2

          內容:91

          解析:短信服務中心號碼為國際型。

          • P3

          內容:683108501505F0

          解析:短信服務中心號碼為:8613800551500

          • P4

          內容:04

          解析:此PDU類型為DELIVER-PDU。

          • P5

          內容:0D

          解析:OA域長度為0D/02=7個字節,含有0D=14個BCD碼字符,即P7區域占有7個字節,含有14個BCD碼字符。

          • P6

          內容:91

          解析:發送方號碼類型為國際型。

          • P7

          內容:685150155323F5

          解析:發送方號碼為:8615055135325

          • P8

          內容:00

          解析:Protocol Identifier,采用默認值00,即普通文本短消息。

          • P9

          內容:00

          解析:Data Coding Scheme,采用默認值00,即GSM-7bit編碼,Class 1類型。

          • P10

          內容:21800101658023

          解析:短消息服務中心在轉發此條短信的時間戳為:2012年08月10日10時56分08秒。

          • P11

          內容:0A

          解析:由于采用GSM-7bit編碼,所以此處表示P12區域內含有10個字符。

          • P12

          內容:B0986C46ABD96EB81C

          解析:通過對GSM-7bit編碼內容進行解碼,得知短信內容為:0123456789

          5. 短信工作過程

          5.1 設備之間的交互過程

          5.2 平臺的消息處理過程

          5.2.1 發送短信

          5.2.2 接收短信

          碼示例

          #python3
          #接口類型:互億無線觸發短信接口,支持發送驗證碼短信、訂單通知短信等。
          #賬戶注冊:請通過該地址開通賬戶 http://user.ihuyi.com/?9vXc7
           
          #注意事項:
          #(1)調試期間,請用默認的模板進行測試,默認模板詳見接口文檔;
          #(2)請使用 用戶名 及 APIkey來調用接口,APIkey在會員中心可以獲取;
          #(3)該代碼僅供接入互億無線短信接口參考使用,客戶可根據實際需要自行編寫;
          
          import urllib.parse
          import urllib.request
          
          #接口地址
          url = 'http://106.ihuyi.com/webservice/sms.php?method=Submit'
          
          #定義請求的數據
          values = {
              'account':'xxxxxxxx',
              'password':'xxxxxxxxxxxx',
              'mobile':'134xxxxxxxx',
              'content':'您的驗證碼是:7835。請不要把驗證碼泄露給其他人。',
              'format':'json',
          }
          
          #將數據進行編碼
          data = urllib.parse.urlencode(values).encode(encoding='UTF8')
          
          #發起請求
          req = urllib.request.Request(url, data)
          response = urllib.request.urlopen(req)
          res = response.read()
          
          #打印結果
          print(res.decode("utf8"))
          
          -----------------------------------
          #python2
          
          #接口類型:互億無線觸發短信接口,支持發送驗證碼短信、訂單通知短信等。
          #賬戶注冊:請通過該地址開通賬戶http://user.ihuyi.com/register.html
          #注意事項:
          #(1)調試期間,請使用用系統默認的短信內容:您的驗證碼是:【變量】。請不要把驗證碼泄露給其他人。
          #(2)請使用 APIID 及 APIKEY來調用接口,可在會員中心獲取;
          #(3)該代碼僅供接入互億無線短信接口參考使用,客戶可根據實際需要自行編寫;
             
          #!/usr/local/bin/python
          #-*- coding:utf-8 -*-
          import httplib
          import urllib
           
          host  = "106.ihuyi.com"
          sms_send_uri = "/webservice/sms.php?method=Submit"
           
          #查看用戶名 登錄用戶中心->驗證碼通知短信>產品總覽->API接口信息->APIID
          account  = "用戶名"
          #查看密碼 登錄用戶中心->驗證碼通知短信>產品總覽->API接口信息->APIKEY
          password = "密碼"
           
          def send_sms(text, mobile):
              params = urllib.urlencode({'account': account, 'password' : password, 'content': text, 'mobile':mobile,'format':'json' })
              headers = {"Content-type": "application/x-www-form-urlencoded", "Accept": "text/plain"}
              conn = httplib.HTTPConnection(host, port=80, timeout=30)
              conn.request("POST", sms_send_uri, params, headers)
              response = conn.getresponse()
              response_str = response.read()
              conn.close()
              return response_str
           
          if __name__ == '__main__':
           
              mobile = "138xxxxxxxx"
              text = "您的驗證碼是:121254。請不要把驗證碼泄露給其他人。"
           
              print(send_sms(text, mobile))
          



          你學會了嗎?


          主站蜘蛛池模板: 天堂一区二区三区精品| 亚洲国产欧美国产综合一区 | 伊人色综合视频一区二区三区| 免费看AV毛片一区二区三区| 成人日韩熟女高清视频一区| 亚洲成av人片一区二区三区| 国精产品一区一区三区| 视频一区二区中文字幕| 国产一区二区三区露脸| 日韩成人一区ftp在线播放| 亚洲综合无码一区二区痴汉 | 中文字幕一区二区人妻性色| 福利片福利一区二区三区| 美日韩一区二区三区| 日本一区二区三区久久| 中文字幕乱码亚洲精品一区| 在线日产精品一区| 精品久久久久久无码中文字幕一区| 日韩人妻精品一区二区三区视频| 国产丝袜视频一区二区三区| 国精品无码一区二区三区左线| 在线精品亚洲一区二区三区| 亚洲一区二区三区自拍公司| 中文无码AV一区二区三区| 久久久久国产一区二区| 成人日韩熟女高清视频一区| 国产视频一区二区在线播放| 久久99精品波多结衣一区| 久久亚洲日韩精品一区二区三区| 亚洲av乱码一区二区三区香蕉| 亚洲天堂一区在线| 无码人妻一区二区三区av| 国产伦精品一区二区三区精品| 一区二区三区观看| 久久青草国产精品一区| 91video国产一区| 国产一区韩国女主播| 国产av福利一区二区三巨 | 无码少妇一区二区三区| 国产福利91精品一区二区| av一区二区三区人妻少妇|