webForumDet fria alternativet

MMSrecieve + ASP.net

.NET

8 svar · 762 visningar · startad av fakenick!

Medlem sedan juli 2002202 inlägg
Frågan#1

Hejsan!

Mitt nuvarande webbhotell stödjer bara ASP.net mediumthrust.
Därför har jag satt upp en egen server på min maskin med ASP.net
för att få MMS-mottagarscriptet från MOSMS att fungera...
Scriptet för att få ner MMS:et fungerar klockrent...
Nu vill jag lägga in värdena jag får med i MMS:et till en databas...

Just nu försöker jag att i ASP.net-dokumentet (på min dator) göra en redirect till webbhotellet för att där lägga till informationen från MMS:et med hjälp av querystring från ASP.net-dokumentet...

Där strular det till sig...

Så fort det är mellanrum i response.redirecten så fungerar det inte...
Så här ser den ut:

Response.Redirect("http://www.test.se/mms.asp?nr="+ phone_number +"&sms="+ subject +"&mms="+ mmset +"");

Fungerar klockrent så länge det inte är mellanrum i "subjectet" där det är tänkt att skriva titel och ett kortfattat innehåll.

Vad kan man göra åt detta?

Tacksam för svar
Mvh John

Medlem sedan juli 2002202 inlägg
#2

Jag vill även göra MMS-namnet ( mimebody.GetFilename() ) till en string.... Hur gör man det? Försökt att deklarera den överst i dokumentet i olika varianter utan framsteg...

Postar hela MMS-mottagarscriptet här:

using System;
using System.Collections;
using System.IO;
using MIME;

public partial class MMSReceive : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        //Mottagning av MMS från MO-SMS
        string subject = Request.ServerVariables["HTTP_MOSMS_SUBJECT"];
        string phone_number = Request.ServerVariables["HTTP_MOSMS_NUMBER"];
        string mmset = "tjena2";

        string headers = "Content-Type: " + Request.ServerVariables["CONTENT_TYPE"] + "\n";
        headers += "Content-Length: " + Request.ServerVariables["CONTENT_LENGTH"] + "\n";
        StreamReader stream = new StreamReader(Request.InputStream, System.Text.Encoding.Default);
        string mimedata = stream.ReadToEnd();

        try
        {
            MimeMessage mms = new MimeMessage();
            mms.LoadBody(headers + "\r\n\r\n" + mimedata);

            ArrayList mmsparts = new ArrayList();
            mms.GetBodyPartList(mmsparts);
            for (int i = 0; i < mmsparts.Count; i++)
            {
                //Spara alla filer i mms mappen.
                MimeBody mimebody = (MimeBody)mmsparts[i];
                if (mimebody.GetFilename() != null)
                    mimebody.WriteToFile(Server.MapPath("mms") + "\\" + [B]mimebody.GetFilename());[/B]

            }
            Response.Redirect("http://www.test.se/mms.asp?nr="+ phone_number +"&sms="+ subject +"&mms="+ mmset +"");
        }
        catch (Exception err)
        {
            //Logga felmeddelandet err.StackTrace();            
            Response.Write("Något blev fel, försök igen");
        }
    }
}
Medlem sedan dec. 19996 721 inlägg
#3

fakenick! skrev:

Fungerar klockrent så länge det inte är mellanrum i "subjectet" där det är tänkt att skriva titel och ett kortfattat innehåll.

Vad kan man göra åt detta?

Alla värden som läggs i en querystring måste URL-kodas.

Response.Redirect("http://www.test.se/mms.asp?nr="+ Server.UrlEncode(phone_number) +"&sms="+ Server.UrlEncode(subject) +"&mms="+ Server.UrlEncode(mmset));

Avsluta inte strängar med & ""

fakenick! skrev:

Jag vill även göra MMS-namnet (

fakenick! skrev:

Jag vill även göra MMS-namnet ( mimebody.GetFilename() ) till en string.... Hur gör man det?

Det är den ju redan... eller vad syftar du på?

string filename= mimebody.GetFilename();
Medlem sedan juli 2002202 inlägg
#4

Jag försöker göra det....

Men det blir då hela tiden fel.

Ifall jag lägger:

string filename = mimebody.GetFilename();

där man deklarerar alla andra "strings" så får jag detta meddelande:

"The name 'mimebody' does not exist in the current context"

...Och ifall jag den i ifsatsen där den sparar ner filen så får jag detta:

"Embedded statement cannot be a declaration or labeled statement"

Men nu funderar jag på att spara ut filen med "datum + tid + filändelse" istället... Hur skulle man kunna göra det i ASP.net?

Original:

mimebody.WriteToFile(Server.MapPath("mms") + "\\" + mimebody.GetFilename());

Detta är min bästa gissning:

using System;
using System.Collections;
using System.IO;
using MIME;

public partial class MMSReceive : System.Web.UI.Page
{

    protected void Page_Load(object sender, EventArgs e)
    {
        //Mottagning av MMS från MO-SMS
[B]        System.DateTime OrderDate = new System.DateTime();
        String DateToString = "";
        OrderDate = System.DateTime.Now;[/B]

        string subject = Request.ServerVariables["HTTP_MOSMS_SUBJECT"];
        string phone_number = Request.ServerVariables["HTTP_MOSMS_NUMBER"];
        string headers = "Content-Type: " + Request.ServerVariables["CONTENT_TYPE"] + "\n";
        headers += "Content-Length: " + Request.ServerVariables["CONTENT_LENGTH"] + "\n";
        StreamReader stream = new StreamReader(Request.InputStream, System.Text.Encoding.Default);
        string mimedata = stream.ReadToEnd();

        try
        {
            MimeMessage mms = new MimeMessage();
            mms.LoadBody(headers + "\r\n\r\n" + mimedata);

            ArrayList mmsparts = new ArrayList();
            mms.GetBodyPartList(mmsparts);
            for (int i = 0; i < mmsparts.Count; i++)
            {
                //Spara alla filer i mms mappen.
                MimeBody mimebody = (MimeBody)mmsparts[i];
                if (mimebody.GetFilename() != null)
                    mimebody.WriteToFile(Server.MapPath("mms") + "\\" + [B]OrderDate.ToString()[/B]);

            }
            Response.Redirect("http://www.test.se/mms.asp?nr="+ Server.UrlEncode(phone_number) +"&sms="+ Server.UrlEncode(subject) +"&mms="+ Server.UrlEncode(subject));
        }
        catch (Exception err)
        {
            //Logga felmeddelandet err.StackTrace();            
            Response.Write("Något blev fel, försök igen");
        }
    }
}

...Men det gick ju inte så bra.... "Något blev fel, försök igen"... :-)

Medlem sedan juli 2002202 inlägg
#5

urlencode fungerade bra btw... :-)

Medlem sedan dec. 19996 721 inlägg
#6

fakenick! skrev:

Jag försöker göra det....

Varför? Om du inte använder filnamnet någon annanstans så är det väl bara onödigt att lägga det i en variabel?

fakenick! skrev:

Ifall jag lägger:

string filename = mimebody.GetFilename();

där man deklarerar alla andra "strings" så får jag detta meddelande:

"The name 'mimebody' does not exist in the current context"

Ja, du kan inte använda mimebody förrän mimebody finns, vilket är en bra bit ner.

fakenick! skrev:

...Och ifall jag den i ifsatsen där den sparar ner filen så får jag detta:

"Embedded statement cannot be a declaration or labeled statement"

Du måste använda måsvingar {} om if-satsen spänner över flera rader.

fakenick! skrev:

Men nu funderar jag på att spara ut filen med "datum + tid + filändelse" istället... Hur skulle man kunna göra det i ASP.net?

Ungefär som du redan gjort, men använd strängformatering eller de olika delbitarna (Year, Month etc.) som finns på DateTime-klassen för att skapa filnamnet. Ett datum använt som det är riskerar att innehålla tecken som inte får finnas i filnamn.

System.DateTime OrderDate = new System.DateTime();
        String DateToString = "";
        OrderDate = System.DateTime.Now;

kan skrivas

DateTime OrderDate = DateTime.Now;
DateToString = OrderDate.ToString();

eller för all del

DateToString = DateTime.Now.ToString();
Medlem sedan juli 2002202 inlägg
#7

Vad jag försöker göra är att skicka med filnamnet i querystringen så att filnamnet sparas i en databas.

Men nunu vill jag ha filnamnet så här:

080305202520.jpg (datumet då filen skapas + filändelse)

Hur skall jag göra?

I vanliga asp så skulle jag göra så här:

newdate = replace(now(),"-","")

etc för att få bort sträck, mellanrum och kolon..

sedan skulle jag splita "mimebody.GetFilename()" vid punkten... Och sedan skriva ut filändelsen efter datumet så här:

newdate = ""& newdate &""& filend &""

Hur gör man? Och vart skall man implementera den koden i den kod jag har. Blir smått snurrig av vad man får och inte får göra i ASP.NET då jag bara tidigare använt ASP.

Mvh John

Medlem sedan dec. 19996 721 inlägg
#8

fakenick! skrev:

Vad jag försöker göra är att skicka med filnamnet i querystringen så att filnamnet sparas i en databas.

OK. Visst kan du lagra det i en variabel (filename=mimebody.GetFilename()) och sedan UrlEncoda den, eller köra direkt med Server.UrlEncode(mimebody.GetFilename())

fakenick! skrev:

Men nunu vill jag ha filnamnet så här:

080305202520.jpg (datumet då filen skapas + filändelse)

Hur skall jag göra?

I vanliga asp så skulle jag göra så här:

newdate = replace(now(),"-","")

etc för att få bort sträck, mellanrum och kolon..

Så kan du göra i C# också (men med DateTime.Now.ToString()), men för att försäkra sig om att formatet blir rätt (oavsett datumformatsinställningar), så bör du använda

DateTime.Now.ToString("yyMMddHHmmss")

i stället. Det löser hela biffen.

fakenick! skrev:

sedan skulle jag splita "mimebody.GetFilename()" vid punkten...

Helt OK, men .NET ger dig den smidiga funktionen Path.GetExtension(mimebody.GetFilename()) som du kan använda (ligger i System.IO)

fakenick! skrev:

Och sedan skriva ut filändelsen efter datumet så här:

newdate = ""& newdate &""& filend &""

Då bör du läsa denna tråden.

Medlem sedan juli 2002202 inlägg
#9

Endast filändelse saknas

Så här ser min kod ut just nu... Allt fungerar förutom att jag inte får ut filändelsen till min response.redirect...

Hur skall jag skriva för att få in allt i en variabel, på rätt ställe så att mimebody hänger med samt datumet?

        try
        {
            MimeMessage mms = new MimeMessage();
            mms.LoadBody(headers + "\r\n\r\n" + mimedata);

            ArrayList mmsparts = new ArrayList();
            mms.GetBodyPartList(mmsparts);
            for (int i = 0; i < mmsparts.Count; i++)
            {
                //Spara alla filer i mms mappen.
                MimeBody mimebody = (MimeBody)mmsparts[i];
                if (mimebody.GetFilename() != null)
                    mimebody.WriteToFile(Server.MapPath("mms") + "\\"+ DateTime.Now.ToString("yyMMddHHmmss") + Path.GetExtension(mimebody.GetFilename()));

                    string newfilename = ""+ DateTime.Now.ToString("yyMMddHHmmss") + Path.GetExtension(mimebody.GetFilename()) +"";

            }
            Response.Redirect("http://www.test.asp?nr="+ Server.UrlEncode(phone_number) +"&sms="+ Server.UrlEncode(subject) +"&mms="+ Server.UrlEncode(newfilename));

Fick allting att fungera (förutom filändelsen) när jag lade in

DateTime.Now.ToString("yyMMddHHmmss") + Path.GetExtension(mimebody.GetFilename())

i response.redirecten...

Mvh John

275 ms totalt · 4 externa anrop · v20260731065814-full.e96017d9
116 ms — deklarationer (db)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)
137 ms — ändringar (db)