C#初學者 建立一支磁碟空間自動MAIL回報程式

各位前輩好,小弟第一次寫C#有在網路找到一支程式,可以自動MAIL回報電腦磁碟空間剩多少,但是程式碼我不知道是不是要用建立"主控台應用程式"還是怎麼新增,填入程式後發現有2個錯誤,找了很久不知道該如何解決,麻煩各位程式的前輩教學一下~非常感謝您~

我是使用:Microsoft Visual Studio 2008

1.using System.Windows.Forms //這一行有問題
2.public partial class Form1 : Form //Form錯誤,不知道是什麼意思

C#初學者 建立一支磁碟空間自動MAIL回報程式
C#初學者 建立一支磁碟空間自動MAIL回報程式


程式碼:
using System;
using System.Windows.Forms;

using System.Runtime.InteropServices;
using System.Net.Mail; // MailMessage

namespace GetDiskFreeSpaceApp
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
label1.Text = "Sending...";
string drive = "D:\\"; // 要查詢剩餘空間的磁碟
ulong FreeBytesAvailable;
ulong TotalNumberOfBytes;
ulong TotalNumberOfFreeBytes;
bool success = GetDiskFreeSpaceEx(drive, out FreeBytesAvailable, out TotalNumberOfBytes, out TotalNumberOfFreeBytes);

if (!success)
throw new System.ComponentModel.Win32Exception();

double free_kilobytes = (double)(Int64)TotalNumberOfFreeBytes / 1024.0;
double free_megabytes = free_kilobytes / 1024.0;
double free_gigabytes = free_megabytes / 1024.0;
//MessageBox.Show(drive + " 剩餘 " + free_gigabytes.ToString() + " GB");
string FreeSpace = free_gigabytes.ToString() + " GB";

// ------- 寄信 --------------------------------------------
// 本程式是針對發信郵件為 Gmail 撰寫 (收件者可以不是 Gmail 信箱)
// 若使用其他 Mail Server 發信,要依據實際情況作修改
// Gmail Email 帳號請自己去申請
// 帳號、密碼請自己替換
System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage();
///msg.To.Add("帳號1@abc.org.tw"); // 收件者1
//msg.To.Add("帳號2@def.org.tw"); // 收件者2
msg.To.Add("收件者帳號1@mail2000.com.tw"); // 收件者2
msg.To.Add("收件者帳號2@gmail.org.tw"); // 收件者2
string FromEmail = "寄件者帳號@gmail.com"; // 寄件者帳號
string FromEmailPassword = "寄件者密碼"; // 寄件者密碼
msg.From = new MailAddress(FromEmail, FromEmail, System.Text.Encoding.UTF8);

msg.Subject = "磁碟剩餘空間" ;
msg.SubjectEncoding = System.Text.Encoding.UTF8;
msg.Body = "磁碟剩餘空間 : " + FreeSpace;
msg.BodyEncoding = System.Text.Encoding.UTF8;
msg.IsBodyHtml = false;
msg.Priority = MailPriority.High;

SmtpClient client = new SmtpClient();
client.Credentials = new System.Net.NetworkCredential(FromEmail, FromEmailPassword);

//client.Port = 587;//Gmail Port, Success
//client.Port = 465;//Gmail Port, Failed
client.Port = 25;//Gmail Port, Success
client.Host = "smtp.gmail.com";
client.EnableSsl = true; // by SSL
object userState = msg;
try
{
// SendAsync Failed
//client.SendAsync(msg, userState);
client.Send(msg);
//MessageBox.Show("Send OK");
label1.Text = "Send Ok";
}
catch (System.Net.Mail.SmtpException ex)
{
//MessageBox.Show(ex.Message, "Failed");
label1.Text = ex.Message;
}
}

[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool GetDiskFreeSpaceEx(string lpDirectoryName,
out ulong lpFreeBytesAvailable,
out ulong lpTotalNumberOfBytes,
out ulong lpTotalNumberOfFreeBytes);
}
}
2012-10-24 22:19 發佈
Console程式預設是不會將System.Windows.Forms.dll加入參考,手動加入即可
感謝您的回覆,有找到方法加入了!但有錯誤是不是要自己新增一個label1呢?

請問大家,我已經成功修正完畢,可執行!可寄信了!

另外請問大家,因為我是要用排程自動執行EXE,及自動執行統計空間寄信功能
不用再開啟EXE檔,按下BUTTON
我是過很多方法,如何將此程式改寫成直接執行呢?謝謝您~
QQ1997 wrote:
請問大家,我已經成功修正完畢,可執行!可寄信了!

另外請問大家,因為我是要用排程自動執行EXE,及自動執行統計空間寄信功能
不用再開啟EXE檔,按下BUTTON
我是過很多方法,如何將此程式改寫成直接執行呢?謝謝您~


最簡單的方法,把處理Button按下的function獨立出來一個單獨的function,然後button的click事件和form的load事件都指向該function,這樣form一載入就會跑了
然後設一個windows排程,指向該程式,可以選登入後自動執行(或其他選項都可)。
內文搜尋
X
評分
評分
複製連結
Mobile01提醒您
您目前瀏覽的是行動版網頁
是否切換到電腦版網頁呢?