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;
        }

Cài đặt SMTP cho WordPress

Trong bài hướng dẫn thiết lập SMTP riêng cho WordPress, mình thấy có rất nhiều bạn đang gặp khó khăn trong việc lấy thông tin SMTP của Gmail để làm server gửi mail trong WordPress, mặc dù việc này rất dễ dàng để làm được.
Bạn nên làm hướng dẫn này ở localhost, nếu ở localhost làm được mà lên host lại không được thì nhà cung cấp của bạn đã chặn luôn cổng SMTP.
Vậy thì trong bài này, mình sẽ hướng dẫn cách thiết lập SMTP từ Gmail chi tiết nhất để bạn có thể làm theo, dĩ nhiên mình đã sử dụng từ rất lâu mà không thấy vấn đề gì, ngoài việc bị giới hạn gửi 2000 email/ngày.
Để thiết lập SMTP chính xác như trong bài này, bạn cần bật chức năng mật khẩu hai lớp (2-Step Verification) cho tài khoản nếu bạn chưa bật, bằng cách vào https://myaccount.google.com/.
Tại đây, bạn vào phần Signing in to Google (Đăng nhập vào Google).
signing-in-to-Google
Rồi chọn bật chức năng bảo mật hai lớp.
baomat2lop-google
Sau khi bật xong, bạn vào lại phần Signing in to Google như ở trên và chọn Mật khẩu ứng dụng.
matkhauungdung-google
Hãy nhấp thẳng vào mục đó, sau đó kéo xuống dưới chọn Select app là Mail và Select device bạn chọn cái gì cũng được, rồi ấn Generate.
gmail-smtp-02
Sau đó nó sẽ cho bạn một dãy ký tự, hãy bôi đen và copy toàn bộ nó, đây chính là mật khẩu SMTP của bạn.
gmail-smtp-03
Bây giờ bạn vào website WordPress, cài plugin WP SMTP và thiết lập như sau:
gmail-smtp-04
Trong đó, bạn cần lưu ý:
  • Chọn phương thức bảo mật là SSL
  • Port là 465
  • SMTP Host là smtp.gmail.com
  • Username phải là địa chỉ email của bạn thuộc tài khoản đã lấy App Password
  • Password chính là App Password của bạn vừa lấy ở trên
Nếu chọn port là 465 với SSL không được thì bạn hãy chọn port 587 với TLS.
Sau đó ấn lưu lại.
Bây giờ bạn có thể sử dụng chức năng test phía dưới để gửi một email đến một địa chỉ nào đó, nếu nó gửi được thì thành công.
gmail-smtp-05
Chúc các bạn thành công!
Nguồn: http://thachpham.com/

Allow Multiple Remote Desktop Sessions – Windows 10

Enabling Concurrent Sessions allows you to Remote Desktop into a PC that someone else is on, under a different user account, and access the system without disconnecting the current logged user
Remember that to remotely connect over the Internet you must configure your router to forward incoming RDP connections to the proper PC IP Address
1. To enable concurrent desktop sessions in Windows 10 is really simple all you need to do isdownload and extract RDP Wrapper Library v1.6.
 RDPWrap-v1.6
2. Once extracted locate Install batch file right click and run as administrator. If prompted click yes to the (UAC).
3. Once the Install batch file finishes, run the RDPConf as administrator. To open the Configuration. If prompted click yes to the (UAC).
Here make sure your configuration looks exactly like the following image:
Allow-multiple-RDP-windows-10-4
Click apply button. Now Windows 10 is configured for multiple Remote Desktop Access.

Video Tutorial:

Tạo controller đầu tiên cho dự án .net mvc6 P2


Model-View-Controller (MVC) mô hình kiến ​​trúc tách ứng dụng thành ba thành phần chính: Model, View, và Controller. Các mô hình MVC giúp bạn tạo ra các ứng dụng có phát triển và bảo trì dễ dàng hơn

Trong hướng dẫn này, một mô hình Phim lấy dữ liệu phim từ một cơ sở dữ liệu, cung cấp cho nó để xem hoặc cập nhật nó. cập nhật dữ liệu được ghi vào một cơ sở dữ liệu SQL Server. Moder : xem là các thành phần hiển thị giao diện người dùng của ứng dụng (UI). Nhìn chung, giao diện người dùng này sẽ hiển thị các dữ liệu mô hình. Control: Lớp học có thể xử lý yêu cầu trình duyệt, lấy dữ liệu từ, và sau đó xử lý và trả về trình duyệt. Trong một ứng dụng MVC, View chỉ hiển thị thông tin

3 thành phần này được quản lý bởi 3 thư mục tương ứng như hình bên dưới

../../_images/mvc1.png
  • tromg Solution Explorer, click chuột phải vào phần Control và chọn Add > New Item.
../../_images/add_controller.png
  • Trong phần Add New Item 
    • chọn MVC Controller Class
    • Đặt tên cho control là “HelloWorldController”
    • Click Add
../../_images/new_hell_ctl.png
Control vừa tạo sẽ có code như sau  với đường dẫn tương đối Controllers/HelloWorldController.cs 
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
using Microsoft.AspNet.Mvc;
using Microsoft.Extensions.WebEncoders;

namespace MvcMovie.Controllers
{
    public class HelloWorldController : Controller
    {
        // 
        // GET: /HelloWorld/ 

        public string Index()
        {
            return "This is my default action...";
        }

        // 
        // GET: /HelloWorld/Welcome/ 

        public string Welcome()
        {
            return "This is the Welcome action method...";
        }
    }
}
Mọi phương thức public trong control đều có thể gọi được ta thử chạy đoạn code dưới nhé
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
public class HelloWorldController : Controller
{
    // 
    // GET: /HelloWorld/ 

    public string Index()
    {
        return "This is my default action...";
    }

    // 
    // GET: /HelloWorld/Welcome/ 

    public string Welcome()
    {
        return "This is the Welcome action method...";
    }
}
Và đây là cách gọi đến hàm trong control từ trình duyệt khi chạy ở chế độ không debug (bấmCtrl+F5)
../../_images/hell1.png
MVC gọi phương thức mặc định trong controller classes  với các phương thức khác trong control ta gọi như sau trên trình duyệt /[Controller]/[tên hàm]/[tham số]
điều này được định nghĩa trong file Startup.cs 
1
2
3
4
5
6
    app.UseMvc(routes =>
    {
        routes.MapRoute(
            name: "default",
            template: "{controller=Home}/{action=Index}/{id?}");
    });
Khi bạn không truyền tham số nào trên trình duyệt mặc định MVC sẽ chọn control và action là Index 
kết quả trả về khi gọi tới control HelloWorld và phương thức webcome
../../_images/welcome.png
Bây giờ ta sẽ truyền thêm tham số vào phương thức Welcome
1
2
3
4
5
public string Welcome(string name, int numTimes = 1)
{
    return HtmlEncoder.Default.HtmlEncode(
        "Hello " + name + ", NumTimes is: " + numTimes);
}
Note
đoạn mã  HtmlEncoder.Default.HtmlEncode  bên trên giúp bạn loại bỏ những đoạn mã nguy hiểm được truyền từ trình duyệt
Note
Trong Studio 2015, khi bạn chạy ở chế độ không debug (Ctl+F5), bạn không cần buld lại web đơn giản chỉ save file và refesh trình duyệt 
Chạy trương trình và truyền tham số từ trình duyệt 
../../_images/rick4.png
Bài sau mình sẽ hướng dẫn tạo View để hiển thị dữ liệu mà control trả về.

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