3

MailSystem.Netを使用してIMAPサーバーに接続しようとしています。複数の単語を含むパスワードでこのコードを使用しようとするまでは、すべて問題ないようです(このコードを使用して、使用する実際の非テスト電子メールにアクセスするための要件)。その時点で、ログインコマンドに対して「引数が多すぎます」というエラーが表示されます。

コードは次のとおりです。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using CommandLine.Utility;
using ActiveUp.Net.Mail;
using PT.MailIntegration.IMAP; // not using this, could be removed



namespace MailP
{
    class Program
    {
        static void Main(string[] args)
        {
            string user = null;
            string password = null;
            string server = null;
            string path = null;

            // this sends the args string into the CommdandLine class and dumps any values into a hashtable
            Arguments CommandLine = new Arguments(args);

            // sets the user
            if (CommandLine["u"] != null)
            {
                user = CommandLine["u"];
            }

            // sets the password
            if (CommandLine["p"] != null)
            {
                password = CommandLine["p"];
            }

            // sets the server
            if (CommandLine["s"] != null)
            {
                server = CommandLine["s"];
            }

            // sets the path
            if (CommandLine["d"] != null)
            {
                @path = CommandLine["d"];
            }

            // program only moves forward as long as it has these 4 arguments
            if ((user != null) &
                (password != null) &
                (server != null) &
                (path != null))
            {
                Imap4Client client = new Imap4Client();
                Console.WriteLine(" " + user + " " + password + " " + server + " " + path);
                client.ConnectSsl(server, 993);
                client.Login(user, password);  //this is where the error pops up
                // this print out means we got in!
                Console.WriteLine("Connection Successful!");

                Mailbox box = client.Mailboxes["inbox"];
                Fetch fetch = box.Fetch;
                int messagesLeft = box.MessageCount;
                int msgIndex = 0;

                while (messagesLeft > 0)
                {
                    msgIndex++;
                    messagesLeft--;
                    Message email = fetch.MessageObject(msgIndex);

                    // if the email has attachments
                    if (email.Attachments.Count > 0)
                    {
                        foreach (MimePart attachment in email.Attachments)
                        {
                            email.Attachments.StoreToFolder(@path);
                            Console.WriteLine("Downloaded!");
                        }
                    }

                    // delete the message using it's UID and position in the mailbox
                    box.UidDeleteMessage(fetch.Uid(msgIndex), true);
                    msgIndex--;
                }

            }
            // this means the user did not enter the expected arguments
            else
            {
                Console.WriteLine("You did not enter the expected data!\n");
                Console.WriteLine("Format should be: ");
                Console.WriteLine("MailP.exe -u <user> -p <password> -s <IMAP SERVER> -d <path>");

                Console.WriteLine("\r\n" + "Press any key to continue...");
                Console.ReadKey(true);

            }
        }
    }
}

入力の場合:

mailP.exe -u "username" -password "this is my password" -s "imap.server.com" -d "c:\ downloads"

エラーが発生します:

{"コマンド\"ログインユーザー名これは私のパスワードです\"失敗しました:130312093815354BADLOGINへの予期しない追加の引数\r \ n"}

ログインの呼び出しでパスワード文字列を文字列としてキャストしようとしました。また、ログインを、2つの文字列を引数として受け取る別の関数の一部にしようとしました。ログイン機能で引用符が正しく解析されていないのではないかと思います。それが私が同様の問題でウェブ上で他の人を見つけることができなかったということであるならば。パスワードをハードコーディングしても同じ問題が発生します。私はここで完全に途方に暮れています。文字列全体をパスワードの引数として渡してほしい。私が見逃したのはばかげた何かでなければならないことを私は知っていますが、私はこのコードを逆にやり過ぎて、それを見逃しています。

4

1 に答える 1

3

パスワードにはスペースが含まれているので、引用符で囲むだけでよいと思います。

client.Login(user, "\"" + password + "\"");
于 2013-03-12T14:18:44.620 に答える