<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    夢幻之旅

    DEBUG - 天道酬勤

       :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      671 隨筆 :: 6 文章 :: 256 評論 :: 0 Trackbacks

    郵件群發反屏蔽的原理是這樣的:
        1.每封郵件內容不同(針對反垃圾郵件的HASH技術)
        2.每封郵件主題不同(針對反垃圾郵件的HASH技術\關鍵詞過濾技術)
        3.郵件發件人不同(針對反垃圾郵件的HASH技術)
        4.發送郵件的ip不同(針對反垃圾郵件的黑白名單技術\反向查詢技術)
        5.單位時間內向某SMTP發送的數量不能超過經驗值(針對反垃圾郵件的黑白名單技術)
        就本次項目,偶寫了如下存過程:
        包頭:

    CREATE OR REPLACE
    PACKAGE "EDM_PACK" 
    AS
      
    PROCEDURE FETCH_SENDER(
       i_current_time 
    IN NUMBER,
       i_other_smtp 
    IN VARCHAR2,
       i_unknown_smtp 
    IN VARCHAR2,
       o_email_id OUT NOCOPY 
    NUMBER,
       o_email OUT NOCOPY 
    VARCHAR2,
       o_password OUT NOCOPY 
    VARCHAR2,
       o_smtp OUT NOCOPY 
    VARCHAR2);   
    END;
        包體:
    CREATE OR REPLACE
    PACKAGE BODY "EDM_PACK" 
    AS
      
    PROCEDURE FETCH_SENDER(
          i_current_time 
    IN NUMBER,
          i_other_smtp 
    IN VARCHAR2,
          i_unknown_smtp 
    IN VARCHAR2,
          o_email_id OUT NOCOPY 
    NUMBER,
          o_email OUT NOCOPY 
    VARCHAR2,
          o_password OUT NOCOPY 
    VARCHAR2,
          o_smtp OUT NOCOPY 
    VARCHAR2)
          
    IS
              temp_count_other_smtp 
    NUMBER DEFAULT 0;
              temp_anti_shield_id 
    NUMBER DEFAULT NULL;
              temp_current_day DATE 
    DEFAULT NULL;
          
    BEGIN
             
    SELECT COUNT(DISTINCT other_smtp)
               
    INTO temp_count_other_smtp
             
    FROM anti_shields
             
    WHERE other_smtp = i_other_smtp;
             
    --查看i_other_smtp是否在反屏蔽的smtp之內
             IF temp_count_other_smtp = 0
             
    THEN
                 
    --此other_smtp未列入返屏蔽之內
                 --從anti_shields中隨機取出一條符合指定other_smtp,
                 --且sending_time大于最小間隔的記錄的id
                 UPDATE anti_shields 
                     
    SET sending_time = i_current_time
                 
    WHERE id IN (
                     
    SELECT *  FROM 
                         (
    SELECT id 
                         
    FROM anti_shields
                         
    WHERE i_current_time - 
                             NVL(sending_time,i_current_time) 
    > 
                             
    86400000/NVL(count_per_day,500)
                           
    AND other_smtp = i_unknown_smtp
                         
    ORDER BY DBMS_RANDOM.Value 
                         )
                     
    WHERE ROWNUM <=1)
                 RETURNING id 
    INTO temp_anti_shield_id;
             
    ELSE
                 
    --此other_smtp已列入返屏蔽之內
                 --從anti_shields中隨機取出一條符合指定other_smtp,
                 --且sending_time大于最小間隔的記錄的id
                 UPDATE anti_shields 
                     
    SET sending_time = i_current_time
                 
    WHERE id IN (
                     
    SELECT *  FROM 
                         (
    SELECT id 
                         
    FROM anti_shields
                         
    WHERE i_current_time - 
                             NVL(sending_time,i_current_time) 
    > 
                             
    86400000/NVL(count_per_day,500)
                           
    AND other_smtp = i_other_smtp
                         
    ORDER BY DBMS_RANDOM.Value 
                         )
                     
    WHERE ROWNUM <=1)
                 RETURNING id 
    INTO temp_anti_shield_id;
             
    END IF;
             
    --從anti_shields中隨機取出一條符合指定other_smtp,
             --且sending_time大于最小間隔的記錄的id
              UPDATE anti_shields 
                
    SET sending_time = i_current_time
              
    WHERE id IN (
                  
    SELECT *  FROM 
                     (
    SELECT id 
                      
    FROM anti_shields
                      
    WHERE i_current_time - 
                          NVL(sending_time,i_current_time) 
    > 
                          
    86400000/NVL(count_per_day,500)
                        
    AND other_smtp = i_other_smtp
                        
    ORDER BY DBMS_RANDOM.Value 
                      )
                  
    WHERE ROWNUM <=1)
              RETURNING id 
    INTO temp_anti_shield_id;
              
    --如果得到了記錄
              IF temp_anti_shield_id IS NOT NULL
              
    THEN
                
    --得到指定id的記錄的current_day并存入temp_current_day中
                SELECT current_day 
                  
    INTO temp_current_day
                
    FROM anti_shields
                
    WHERE id = temp_anti_shield_id;
                
    --如果得到了當前時間
                IF temp_current_day IS NOT NULL
                
    THEN
                   
    --看是否更新current_day和count_day
                   IF TO_CHAR(SYSDATE,'YYMMDD'!=
                      TO_CHAR(temp_current_day,
    'YYMMDD')
                   
    THEN
                   
    --更新current_day和count_day
                     UPDATE anti_shields
                       
    SET current_day = SYSDATE,count_day = 0
                     
    WHERE id = temp_anti_shield_id;
                   
    END IF;
                
    END IF;
                
    --得到我們自己SMTP服務器的ip
                SELECT ourself_smtp 
                  
    INTO o_smtp
                
    FROM anti_shields
                
    WHERE id = temp_anti_shield_id;
                
    --如果ourself_smtp不為NULL
                IF o_smtp IS NOT NULL
                
    THEN
                    
    --隨機從自已的SMTP服務器上取得一帳號
                    SELECT id 
                    
    INTO o_email_id 
                    
    FROM
                      (
    SELECT id 
                       
    FROM senders 
                       
    WHERE ourself_smtp = o_smtp
                           
    ORDER BY DBMS_RANDOM.Value 
                      )
                    
    WHERE ROWNUM <=1;
                    
    --如果得到帳號
                    IF o_email_id IS NOT NULL
                    
    THEN 
                       
    --得到email帳號
                       SELECT email 
                        
    INTO o_email 
                       
    FROM senders
                       
    WHERE id = o_email_id;
                       
    --得到email密碼
                       SELECT password 
                         
    INTO o_password
                       
    FROM senders
                       
    WHERE id = o_email_id;
                    
    END IF;
                    
    --判斷是否更改日發送量和發送總量
                    IF o_email_id IS NOT NULL
                      
    AND o_email IS NOT NULL
                      
    AND o_password IS NOT NULL
                      
    AND o_smtp IS NOT NULL
                   
    THEN
                      
    --更改日發送量和發送總量
                      UPDATE anti_shields
                        
    SET count_day = count_day + 1,
                          total_count 
    = total_count + 1
                      
    WHERE id = temp_anti_shield_id;
                   
    END IF
                
    END IF;
              
    END IF;
              EXCEPTION
                  
    WHEN OTHERS
                  
    THEN
                     o_email_id :
    = NULL;
                     o_email :
    = NULL;
                     o_password :
    = NULL;
                     o_smtp :
    = NULL;
      
    END;
    END;
        存儲過程,美麗優雅的波浪,呵呵....
    posted on 2008-01-22 12:09 HUIKK 閱讀(357) 評論(0)  編輯  收藏 所屬分類: DataBase
    主站蜘蛛池模板: 3344在线看片免费| 亚洲日韩一中文字暮| 久久精品国产亚洲| 久久精品国产亚洲综合色| 久久激情亚洲精品无码?V| 高清在线亚洲精品国产二区| 四虎国产精品免费久久影院| 国产乱人免费视频| 四虎影库久免费视频| 亚洲国产精品成人AV无码久久综合影院 | 四虎影在线永久免费四虎地址8848aa| 青草草在线视频永久免费| 啦啦啦在线免费视频| 国产男女猛烈无遮挡免费视频网站 | 久久水蜜桃亚洲AV无码精品| 亚洲jizzjizz少妇| 窝窝影视午夜看片免费| 久久性生大片免费观看性| AAA日本高清在线播放免费观看| 三年片在线观看免费观看大全动漫 | 亚洲婷婷天堂在线综合| 亚洲成年网站在线观看| 亚洲国产成人无码AV在线| 免费人成视频在线播放| 在线观看黄片免费入口不卡| 午夜爽爽爽男女免费观看影院| 97视频免费在线| 暖暖免费高清日本一区二区三区| 亚洲 自拍 另类小说综合图区| 国产亚洲美女精品久久久| 亚洲AV日韩精品久久久久久久| 亚洲狠狠狠一区二区三区| 亚洲成AV人片高潮喷水| 欧洲美女大片免费播放器视频| 国产午夜无码精品免费看| 无码专区永久免费AV网站| 亚洲国产精品成人| 亚洲美女视频网址| 337p日本欧洲亚洲大胆人人| 国产做国产爱免费视频| 国产大片91精品免费观看不卡|