Hiển thị các bài đăng có nhãn HỌC LẬP TRÌNH. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn HỌC LẬP TRÌNH. Hiển thị tất cả bài đăng

Code Đoc và tải file đính kèm từ Email


Code Đoc và tải file đính kèm từ Email

Chào các bạn, hôm nay mình sẽ giới thiệu các bạn code lấy mail tự động, từ Imap

Đầu tiên tới địa chỉ  http://www.limilabs.com/mail để tải thư viện xử lý Mail
Code đơn giản để nhận thư

using(Pop3 pop3 = new Pop3())

{

    pop3.Connect("pop3.server.com");  // or ConnectSSL for SSL      

    pop3.UseBestLogin("user", "password");



    List<string> uids = pop3.GetAll();
// Lấy tất cả các thư

    foreach (string uid in uids)

    {

        IMail email = new MailBuilder()

            .CreateFromEml(pop3.GetMessageByUID(uid));

        Console.WriteLine(email.Subject);

    }

    pop3.Close();
}
Nâng cao
Bộ lọc: Nhận các thư trong khoảng thời gian và tiêu đề nhập vào
1)  Tạo mail
Email email = new Email (mailServer, email, passwordEmail, subjectEmail, attachedFileTypes, onDate);
2)  Kết nối và lấy nội dung thư theo ID với email được truyền từ bước 1. Hãy đảm bảo rằng Mail của bạn đã được cấu hình Bật IMap nhé

public override List<SaveFile> DownLoadFileAttachment(Email email)
        {
            List<SaveFile> listSavedFiles = new List<SaveFile>();
            using (Imap imap = new Imap())
            {
                try
                {
                    imap.ConnectSSL(email.MailServer);
                    imap.Login(email.UserName, email.Password);

                    if (imap.Connected)
                    {
                        DateTime fromDate = DateTime.Today;
                        DateTime toDate = DateTime.Today;
                        if (!string.IsNullOrEmpty(email.FromDate))
                        {
                            fromDate = DateTime.Parse(email.FromDate);
                        }

                        if (!string.IsNullOrEmpty(email.ToDate))
                        {
                            toDate = DateTime.Parse(email.ToDate);
                        }

                        if (!string.IsNullOrEmpty(email.OnDate))
                        {
                            fromDate = DateTime.Parse(email.OnDate).Date;
                            toDate = DateTime.Parse(email.OnDate).Date.AddDays(1);
                        }

                        imap.SelectInbox();
                        List<long> listUIDS = GetEmailUIDS(imap, email);
// Lấy tất cả các mail theo điều kiện thỏa mãn của mail ở bước 1
                        foreach (long uid in listUIDS)
                        {
                            string eml = imap.GetMessageByUID(uid);
                            IMail mail = new MailBuilder().CreateFromEml(eml);
                            if (mail != null && mail.Date.HasValue)
                            {
                                if (mail.Date.Value.Date >= fromDate && mail.Date.Value.Date <= toDate)
                                {
                                    listSavedFiles.AddRange(SaveFile(mail, email));
                                }
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    Logger.WriteErrorLog(LogPath, ex, null);
                }
                finally
                {
                    imap.Close();
                }
            }

            return listSavedFiles;
        }

Hướng dẫn tạo SSIS package để Import/Export dữ liệu và Tạo SQL Server Agent Job để thực thi package.

1. Hướng dẫn tạo SSIS package để thực hiện Import/Export dữ liệu giữa hai server.
Trước tiên bạn phải cài Visual Studio 2013 và MS SQL Server Management Studio 2014
Để tạo được SSIS package thì tiếp theo bạn phải download và cài Microsoft SQL Server Data Tools - Business Intelligence for Visual Studio 2013
Sau khi cài xong, mở SQL Server Data Tools for Visual Studio 2013 lên:
Tiếp theo bạn vào File > New > Project và tạo một Integration Services Project:
Sau khi project được tạo bạn sẽ nhìn thấy file Package.dtsx mặc định tạo ra
Tạo DB Connections Nguồn và Đích:
  • Click chuột phải vào khu vực Connection Managers và chọn New OLE DB Connection…
Cửa sổ Configure OLE DB Connection Manager xuất hiện
Click New > Điền các thông tin server về DB nguồn

(Click nút Test Connection nếu OK sẽ thông báo 1 cửa sổ success)
Nhấn OK để kết thúc:
Click chuột phải làm tương tự như trên rồi điền các thông tin server về DB đích. Mục đích của chúng ta là import dữ liệu (một hoặc nhiều bảng) từ db Nguồn tới db Đích.
Trong bài này chúng ta lấy ví dụ import dữ liệu từ 1 bảng tên là tblSummaryReport ở db Nguồn tới bảng cùng tên ở db Đích. Lưu ý cần tạo cấu trúc bảng ở db Đích giống hệt cấu trúc bảng ở db Nguồn.
  • Trên thanh công cụ SSIS Toolbox kéo chọn control Execute SQL Task  và đặt tên là “Truncate table at Distination”, mục đích là trước khi import sẽ đảm bảo xóa trắng dữ liệu bảng tblSummaryReport ở db Đích.
  • Click đúp vào control trên (hoặc chuột phải > Properties) và thiết lập các thông tin như sau:
  • Tiếp theo kéo thả control “Data Flow Task” vào trong cửa sổ của file Package.dtsx và đặt tên “Import data”
  • Click đúp vào control trên và nó mở ra cửa sổ Data Flow như hình dưới:
  • Kéo thả control “OLD DB Source” từ SSIS Toolbox (dưới group: Other Sources) vào và thiết lập Connection và table như hình bên dưới:
  • Tiếp theo kéo thả control “OLD DB Destinations” từ SSIS Toolbox (dưới group: Other Destinations) vào và thiết lập Connection và table như hình bên dưới (à bạn phải nhớ là tạo trước mapping trỏ từ control Nguồn tới control Đích theo mũi tên)
  • Quay trở lại tab “Control Flow” của file Package.dtsx và thiết lập mapping giữa 2 control như hình bên dưới. (Lưu ý việc mapping này chỉ ra rằng các object của chúng ta tạo ra sẽ chạy từ đâu đến đâu tron các bước thiết lập)
  • Nhấn F5 và chạy thử, xem các kết quả:

>> Như vậy chúng ta đã hoàn thành xong phần import/Export dữ liệu giữa 2 bảng từ 2 server.

2. Hướng dẫn tạo SQL Server Agent để thực thi file package .dtsx đã tạo ở trên
Mục đích của việc này là import/export dữ liệu được chạy hàng ngày/hàng tuần/… một cách tự động theo ý đồ của tác giả, ở đây mục đích của mình là hằng ngày sẽ lấy lại dữ liệu mới nhất từ server nguồn về server đích.
Để làm được điều này yêu cầu bạn phải cài SQL Server Agent, nó là 1 dịch vụ tích hợp trong MS SQL Server 2014 (hoặc các phiên bản cũ hơn).
Tạo SQL Agent Job:
  • Trước khi tạo một Job trong SQL Agent thì chúng ta cần phải tạo một Credential với tên được đặt là “SSISProxyCredentials”, với Identify và Password mình sử dụng tài khoản windows:
  • Tiếp theo chúng ta sẽ tạo một New Proxy, và nhập các thông tin như hình dưới:
Mục đích của 2 bước trên là tạo ra 1 chứng thực khi chạy một SQL Agent Job
  • Tạo một Job với tên “Run SSIS Package for Import Data”
  • Tiếp đến tạo 1 Step trong Job: Click vào Steps > New, và điền các thông tin như hình:
Trong phần Advanced:
Thiết lập lịch chạy tự động cho Job: Chọn Schedules > New:
> Lưu ý ở trên mình đặt lịch chạy hằng ngày vào lúc 12:00AM.
Như vậy là đã xong, bây giờ mình sẽ chạy thử nhá:
Và kết quả sau khi chạy Success:
Tóm lại: Ở trên mình đã trình bày chi tiết cách tạo SSIS package để Import/Export dữ liệu và Tạo SQL Server Agent Job để thực thi package. Ngoài ra bạn có thể tham khảo thêm nhiều cách import/export dữ liệu từ nhiều nguồn và đích khác nhau chứ không giới hạn chỉ OLE DB Connection. Và bạn cũng có thể Import/Export data trên SSIS package bằng SQL Scripts/Excel/CSV/MySQL/..etc..

Trương Đức Tài

Bài 11 - Khởi chạy cho đồng hồ bằng HTML Canvas (Canvas Clock - Phần 5 cuối)

Phần 5 - Khởi chạy đồng hồ

Để khởi chạy cho đồng hồ, gọi hàm drawClock trong các khoảng thời gian:

JavaScript:

var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");
var radius = canvas.height / 2;
ctx.translate(radius, radius);
radius = radius * 0.90
//drawClock();setInterval(drawClock, 1000);
Xem demo »

Giải thích code trên:

Điều mà bạn phải làm bây giờ là start đồng hồ để cho nó chạy, gọi hàm drawClock ở các khoảng thời gian.

Thay thế:
drawClock();
Với:
setInterval(drawClock, 1000);
NoteKhoảng thời gian đơn vị là milliseconds. hàm drawClock sẽ được gọi cho mỗi giây, tức 1000 milliseconds.

Trương Đức Tài.

Bài 10 - Vẽ kim trên mặt đồng hồ bằng HTML Canvas (Canvas Clock - Phần 4)

Phần 4 - Vẽ kim đồng hồ

...Tiếp theo, Bài này mình sẽ hướng dẫn cách làm thế nào để raw được những chiếc kim chỉ giờ, phút, giây trên mặt đồng hồ.
Bước đầu tiên, tạo một hàm JavaScript như code bên dưới:

JavaScript:

function drawClock() {
    drawFace(ctx, radius);
    drawNumbers(ctx, radius);
    drawTime(ctx, radius);}

function drawTime(ctx, radius){
    var now = new Date();
    var hour = now.getHours();
    var minute = now.getMinutes();
    var second = now.getSeconds();
    //hour    hour=hour%12;
    hour=(hour*Math.PI/6)+(minute*Math.PI/(6*60))+(second*Math.PI/(360*60));
    drawHand(ctx, hour, radius*0.5, radius*0.07);
    //minute    minute=(minute*Math.PI/30)+(second*Math.PI/(30*60));
    drawHand(ctx, minute, radius*0.8, radius*0.07);
    // second    second=(second*Math.PI/30);
    drawHand(ctx, second, radius*0.9, radius*0.02);
}

function drawHand(ctx, pos, length, width) {
    ctx.beginPath();
    ctx.lineWidth = width;
    ctx.lineCap = "round";
    ctx.moveTo(0,0);
    ctx.rotate(pos);
    ctx.lineTo(0, -length);
    ctx.stroke();
    ctx.rotate(-pos);
}
Xem demo »

Giải thích code trên:

Sử dụng hàm  Date để lấy giờ, phút, giây của hệ thống:
var now = new Date();
var hour = now.getHours();
var minute = now.getMinutes();
var second = now.getSeconds();
Tính toán góc của kim giờ, và vẽ nó với độ dài bằng 50% của bán kính, và chiều rộng bằng 7% của bán kính đồng hồ:
hour=hour%12;
hour=(hour*Math.PI/6)+(minute*Math.PI/(6*60))+(second*Math.PI/(360*60));
drawHand(ctx, hour, radius*0.5, radius*0.07);
Sử dụng cùng kỹ thuật trên cho kim phút và kim giây.
Trong hàm drawHand() chứa các hàm và và thuộc tính chúng ta đã được học, do đó mình sẽ không cần phải giải thích thêm. Nó đơn giản chỉ vẽ một đường thẳng với chiều dài và chiều rộng đã cho.

Trương Đức Tài.

Bài 9 - Tạo số trên mặt đồng hồ bằng HTML Canvas (Canvas Clock - Phần 3)

Phần 3 - Vẽ số trên mặt đồng hồ

...tiếp bài trước chúng đã được học cách để tạo ra mặt đồng hồ.

Trong bài này mình sẽ tiếp tục hướng dẫn cách làm thế nào để tạo những con số hiển thị trên mặt đồng hồ. Đầu tiền mình sẽ tạo một hàm JavaScript để vẽ những con số cho đồng hồ như sau:


JavaScript:

function drawClock() {
    drawFace(ctx, radius);
    drawNumbers(ctx, radius);
}

function drawNumbers(ctx, radius) {
    var ang;
    var num;
    ctx.font = radius*0.15 + "px arial";
    ctx.textBaseline="middle";
    ctx.textAlign="center";
    for(num= 1; num < 13; num++){
        ang = num * Math.PI / 6;
        ctx.rotate(ang);
        ctx.translate(0, -radius*0.85);
        ctx.rotate(-ang);
        ctx.fillText(num.toString(), 0, 0);
        ctx.rotate(ang);
        ctx.translate(0, radius*0.85);
        ctx.rotate(-ang);
    }
}
Xem demo »

Giải thích code trên

Thiết lập kích thước font (của đối tượng cần vẽ) bằng 15% của bán kính đồng hồ:
ctx.font = radius*0.15 + "px arial";
Thiết lập căn chỉnh text tới giữa của vị trí cần hiển thị:
ctx.textBaseline="middle";
ctx.textAlign="center";
Tính toán vị trí cần hiển thị (12 số) tới 85% của bán kính đồng hồ, xoay (PI/6) cho mỗi số:
for(num= 1; num < 13; num++) {
    ang = num * Math.PI / 6;
    ctx.rotate(ang);
    ctx.translate(0, -radius*0.85);
    ctx.rotate(-ang);
    ctx.fillText(num.toString(), 0, 0);
    ctx.rotate(ang);
    ctx.translate(0, radius*0.85);
    ctx.rotate(-ang); 
}

Trương Đức Tài.