2013年12月8日 星期日

[C#]System.Net.Mail.SmtpClient寄信(無需帳密)

用樣寄是很好啦不需要登入帳密
但垃圾信太多小心被封了哈!!


1.web.config要加下面這段


<system.net>
<mailSettings>
<smtp deliveryMethod="Network">
<network defaultCredentials="false" host="msa.hinet.net" port="25"/>
</smtp>
</mailSettings>
</system.net>


2.收件人的格式為

<abc@gmail.com> ,<def@gmail.com> ,


3.使用時要new出來喔

PublicClass Class = new PublicClass();//假如這function放在PublicClass裡時
Class.SendByMail(收件人,標題,內文, 寄件人會顯示的標題, 寄件的Email);


4.Function

/// <summary>
/// 用Client寄信 需New出來
/// </summary>
/// <param name="pMail">收件者可以,分格寄多人</param>
/// <param name="pSubject">信件標題</param>
/// <param name="pBody">信件內容</param>
/// <param name="pFromMailName">寄件人會顯示的標題</param>
/// <param name="pFromMail">寄件的Email</param>
public void SendByMail(string pMail, string pSubject, string pBody, string pFromMailName, string pFromMail)
{
System.Net.Mail.MailMessage Mail = new System.Net.Mail.MailMessage();
Mail.From = new System.Net.Mail.MailAddress(pFromMail, pFromMailName);
Mail.Subject = pSubject;
Mail.IsBodyHtml = true;
Mail.BodyEncoding = System.Text.Encoding.UTF8;
Mail.SubjectEncoding = System.Text.Encoding.UTF8;
Mail.Body = pBody;
//這邊多人可以回圈
char[] delimiterChars = { ',' };

string[] words = pMail.Split(delimiterChars);

foreach (string s in words)
{
if (s.Trim() != "")
{
Mail.To.Add(s);
}
}

System.Net.Mail.SmtpClient SMTPServer = new System.Net.Mail.SmtpClient(System.Web.Configuration.WebConfigurationManager.AppSettings["SmtpHost"]);
SMTPServer.Send(Mail);
System.Threading.Thread.Sleep(5);
GC.Collect();
GC.WaitForPendingFinalizers();
}

[C#]圖片轉二進位

using System.IO;
using System.Drawing;

/// <summary>
/// 將 Image 轉換為 Byte 陣列。
/// </summary>
/// <param name="ImgPath">圖片路徑 。</param> 
public static byte[] ImageToBuffer(string ImgPath)
{
byte[] _ImageBytes;

if (File.Exists(ImgPath))
{
Image _Image = Image.FromFile(ImgPath);
MemoryStream ms = new MemoryStream();
_Image.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);
_ImageBytes = ms.GetBuffer();
ms.Dispose();
_Image.Dispose();
}
else
{
_ImageBytes = null;
}

return _ImageBytes;
}

2013年11月28日 星期四

[C#][TCP] TCP 傳接收Byte資料

string TcpConnect(string message, string hostNameOrAddress, string port)
        {
            Cursor.Current = Cursors.WaitCursor;
            Cursor.Show();

            bool IsNumber = true;
            foreach (char c in port)
            {
                IsNumber = Char.IsNumber(c);
                if (!IsNumber)
                    break;
            }

            if (!IsNumber)
            {
                Cursor.Current = Cursors.Default;
                Cursor.Hide();
                return "S";
            }
            //throw new ArgumentException("Port must be \"Number\"!!");

            Encoding encode = Encoding.ASCII;

            TcpClient client = new TcpClient(AddressFamily.InterNetwork);
            client.Client.Poll(2000, SelectMode.SelectError);
            client.Client.Poll(2000, SelectMode.SelectRead);
            client.Client.Poll(2000, SelectMode.SelectWrite);

            NetworkStream stream = null;

            ArrayList buffer = null;

            Char splitchar = '^';

            try
            {
                IPEndPoint point = new IPEndPoint(Dns.GetHostEntry(hostNameOrAddress).AddressList[0], int.Parse(port));

                client.Connect(point);
                stream = client.GetStream();

                string sentdata = String.Format("{1}{0}{2}", splitchar.ToString(), message.Length, message);
                buffer = new ArrayList(encode.GetBytes(sentdata));
                stream.WriteByte(1);
                stream.Write((byte[])buffer.ToArray(typeof(System.Byte)), 0, buffer.Count);
                stream.WriteByte(2);

                int iTimeOut = 2000;
                while (client.Client.Available == 0 && !stream.DataAvailable)
                {
                    if (iTimeOut == 0)
                        break;
                    Thread.Sleep(1);
                    iTimeOut--;
                }

                buffer.Clear();

                int i = stream.ReadByte();
                while (i > -1)
                {
                    if (i == 1)
                        buffer.Clear();
                    else if (i == 2)
                        break;
                    else
                        buffer.Add((byte)i);

                    i = stream.ReadByte();
                }
            }
            catch (SocketException)
            {
                if (errCount == 3)
                {
                    //SharedMethod.NextAddr = !SharedMethod.NextAddr;
                    errCount = 1;
                }
                else
                {
                    errCount++;
                }

                Cursor.Current = Cursors.Default;
                Cursor.Hide();
                return "S";
            }
            catch (Exception)
            {
                Cursor.Current = Cursors.Default;
                Cursor.Hide();
                return "G";
            }
            finally
            {
                if (stream != null)
                    stream.Close();
                if (client != null)
                    client.Close();
            }

            if (buffer != null && buffer.Count > 0)
            {
                byte[] rbyte = (byte[])buffer.ToArray(typeof(System.Byte));
                string result = encode.GetString(rbyte, 0, rbyte.Length);
                if (String.IsNullOrEmpty(result) || result.IndexOf(splitchar) < 0)
                {
                    Cursor.Current = Cursors.Default;
                    Cursor.Hide();
                    return "R";
                    //throw new InvalidOperationException("Receive data struct incurrect!!...");
                }
                else
                {
                    string slength = result.Substring(0, result.IndexOf(splitchar));
                    int datalength = 0;
                    try
                    {
                        datalength = int.Parse(slength);
                    }
                    catch
                    {
                        Cursor.Current = Cursors.Default;
                        Cursor.Hide();
                        return "R";
                        //throw new InvalidOperationException("LEN must be \"Number\"!!");
                    }

                    if (datalength == result.Length - slength.Length - 1)
                    {
                        Cursor.Current = Cursors.Default;
                        Cursor.Hide();
                        return result.Substring(slength.Length + 1);
                    }
                    else
                    {
                        Cursor.Current = Cursors.Default;
                        Cursor.Hide();
                        return "R";
                    }
                    //throw new InvalidOperationException("Data lost!!");
                }
            }
            else
            {
                Cursor.Current = Cursors.Default;
                Cursor.Hide();
                return "G";
            }
        }

2013年11月27日 星期三

[Java] public/private/protected

在說明這四個關鍵字之前,我想就class之間的關係做一個簡單的定義,對於繼承自己的class,base class可以認為他們都是自己的子女,而對於和自己一個目錄下的classes,認為都是自己的朋友。

1、public:public表明該數據成員、成員函數是對所有用戶開放,所有用戶都可以直接進行調用

2、private:private表示私有,私有的意思就是除了class自己之外,任何人都不可以直接使用,私有財產神聖不可侵犯嘛,即便是子女,朋友,都不可以使用。

3、protected:protected對於子女、朋友來說,就是public的,可以自由使用,沒有任何限制,而對於其他的外部class,protected就變成private。

作用域        當前類      同一package 子孫類       其他package

public     V    V      V    V

protected   V    V         V     X

friendly    V    V         X    X

private    V    X      X     X

不寫時默認為friendly

[C#] String.format 輸出格式

//數字字串不足,前面補0
Response.Write(String.Format("{0:00000}", 123)); // 輸出 00123
Response.Write(String.Format("{0:D5}", 123)); // 輸出 00123

//數字字串不足,前後都補0
Response.Write(String.Format("{0:00000.0000}", 123.45)); // 輸出 00125.4500

//每3位數加逗號
Response.Write(String.Format("{0:0,0}", 0)); // 輸出 00
Response.Write(String.Format("{0:0,0}", 1234567)); // 輸出 1,234,567  //缺點:當數字=0時,會顯示 00
Response.Write(String.Format("{0:N}", 1234567)); // 輸出 1,234,567.00
Response.Write(String.Format("{0:N0}", 1234567)); // 輸出 1,234,567
Response.Write(String.Format("{0:N4}", 1234567)); // 輸出 1,234,567.0000

//電話號碼
Response.Write(String.Format("{0:(###) ####-####}", 88012345678)); // 輸出(880)1234-5678

//金額表示方式
Response.Write(String.Format("{0:C}", 0)); // 輸出 NT$0.00
Response.Write(String.Format("{0:C}", 12345)); // 輸出 NT$12,345.00
Response.Write(String.Format("{0:$#,##0.00;($#,##0.00);Zero}", 0)); // 輸出 Zero
Response.Write(String.Format("{0:$#,##0.00;($#,##0.00);Zero}", 1234.50)); // 輸出 $1,234.50

//百分比
Response.Write(String.Format("{0:0%}", 17 / (float)60)); // 輸出 28%

//到小數2位的百分比
Response.Write(String.Format("{0:0.00%}", 17 / (float)60)); // 輸出 28.33%

//取小數第4位,並對第5位做四捨五入
Response.Write(String.Format("{0:#,0.####}", 1234.56789)); // 1,234.5679

//小數點不足4位不補0
Response.Write(String.Format("{0:0.####}", 1234.567)); // 1234.567

2013年11月26日 星期二

[.Net][C#] DateTime 格式

在cs裡面:

DateTime dt = DateTime.Now;

TextBox_Date.Text = dt.ToString("yyyy/MM/dd");  // 2013/11/27


在aspx裡面:

<%-- 假設資料表有欄位名稱Date並且是DateTime型態 --%>

<asp:Label ID="DateLabel" runat="server" Text='<%# Eval("Date","{0:yyyy/MM/dd}") %>' />

[SQL] INNER JOIN

SELECT 

B.UserName, A.Type

FROM 

資料表名稱1 AS A 

INNER JOIN 

資料表名稱2 AS B 

ON 

A.UserNo = B.UserNo;

利用兩個資料表皆有的欄位UserNo來連結。