<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
    主站蜘蛛池模板: 国产亚洲一区二区三区在线不卡 | 最近免费中文在线视频| 6080午夜一级毛片免费看 | 亚洲av鲁丝一区二区三区| 亚洲成人高清在线观看| 亚洲精品国产suv一区88| 一级毛片不卡免费看老司机| 免费久久人人爽人人爽av| 免费能直接在线观看黄的视频| 在线成人a毛片免费播放| 亚洲AV成人潮喷综合网| 亚洲Av无码专区国产乱码DVD| 亚洲丰满熟女一区二区v| 无人视频在线观看免费播放影院 | 特级精品毛片免费观看| 午夜视频在线在免费| 77777亚洲午夜久久多人| 亚洲熟妇av一区二区三区下载| 亚洲AV第一成肉网| 日韩精品无码免费专区网站| 大学生一级毛片免费看| 久久久青草青青国产亚洲免观| 91亚洲精品自在在线观看| 免费一级全黄少妇性色生活片 | 国产啪亚洲国产精品无码| 亚洲精品第五页中文字幕| 黄页网站在线视频免费| 最近中文字幕国语免费完整| 全部免费毛片在线| 激情内射亚洲一区二区三区| 国产亚洲精品成人久久网站| 久久综合给合久久国产免费| 免费中文字幕不卡视频| 亚洲美女免费视频| www成人免费观看网站| 在线观看av永久免费| 好看的亚洲黄色经典| 精品亚洲国产成人av| 亚洲视频免费在线播放| 亚洲中文字幕无码爆乳av中文| 亚洲a级成人片在线观看|