Ο καλύτερος τρόπος για να αποκτήσετε πρόσβαση σε Exchange χρησιμοποιώντας PHP;




Γράφω μια εφαρμογή CMS σε PHP και μία από τις προϋποθέσεις είναι ότι πρέπει να είναι σε θέση να διασυνδέονται με το διακομιστή Exchange του πελάτη. Έχω γράψει μέχρι αυτή τη λειτουργία λίγες φορές στο παρελθόν και έχουν χρησιμοποιήσει πάντα [WebDAV](http://en.wikipedia.org/wiki/WebDAV) για να το κάνουμε, αλλά τώρα είμαι κλίνει μακριά από αυτό.


Θα πρέπει να τρέχει το site στο IIS ή Apache (χωρίς προτίμηση) στο διακομιστή των Windows 2008. Λίγα πράγματα που θα πρέπει να κάνετε περιλαμβάνουν την προσθήκη επαφών στο βιβλίο διευθύνσεων ενός δεδομένου χρήστη, αποστολή μηνυμάτων ηλεκτρονικού ταχυδρομείου ως δεδομένο χρήστη και εκτέλεση αναφορών σχετικά με τις επαφές για την χρήστης.


Όλα αυτά είναι πολύ εύκολο να κάνει με το WebDAV, αλλά αν υπάρχει ένας καλύτερος τρόπος που δεν απαιτεί καμία λειτουργικότητα που είναι πιθανό να καταργηθεί σύντομα.


Καμιά ιδέα?


 Εκσυγχρονίζω:


Justin, μου αρέσει η ιδέα της χρησιμοποίησης των αντικειμένων com, θα ήθελα απλώς να ανησυχείτε για τη διατήρηση ενός 3ου προϊόν για να κάνουν την εργασία τα πάντα ...


John, δεν μπορώ να γράψω μια υπηρεσία web σε C # για τη διασύνδεση με για αυτές τις λειτουργίες και να έχετε πρόσβαση με την PHP εφαρμογών μου, αλλά είναι επίσης λίγο έξω από το δρόμο.


Μέχρι στιγμής, δεν είμαι 100% πεπεισμένος ότι ένα από αυτά είναι καλύτερο από το WebDAV ... 


Μπορεί κάποιος να μου δείξει πού είμαι είναι ανόητο;
Δεν έχω χρησιμοποιήσει PHP για να γίνει αυτό, αλλά έχουν εμπειρία στη χρήση C # για να επιτευχθεί το ίδιο πράγμα.


Το API του Outlook είναι ένας τρόπος για την αυτοματοποίηση του Outlook και όχι τη σύνδεση με Exchange άμεσα. Έχω λάβει στο παρελθόν αυτή την προσέγγιση σε C # εφαρμογή και λειτουργεί, αν και μπορεί να είναι προβληματικό.


Αν θέλετε να συνδεθείτε απευθείας με το διακομιστή του Exchange που θα χρειαστεί για την έρευνα επεκτάθηκε MAPI.


Στο παρελθόν έχω χρησιμοποιήσει αυτό το περιτύλιγμα [MAPIEx: Επέκταση MAPI περιτύλιγμα](http://www.codeproject.com/KB/IP/CMapiEx.aspx) .


Πρόκειται για ένα C # έργο, αλλά πιστεύω ότι μπορείτε να χρησιμοποιήσετε κάποιο κώδικα .NET στον σέρβερ PHP5 των Windows. Εναλλακτικά έχει ένα C ++ πυρήνα DLL που μπορεί να είναι σε θέση να χρησιμοποιήσει. Έχω διαπιστώσει ότι είναι πολύ καλή και υπάρχουν κάποιες καλό παράδειγμα εφαρμογές.


 Εκσυγχρονίζω:


Συγγνώμη για την καθυστέρηση κανένα τρέχον τρόπος για να παρακολουθείτε θέσεις ακόμα.


Συμφωνώ προσθέτοντας περισσότερο στρώμα για να την αίτησή σας, θα στηρίζεται στην 3η κωδικό κόμμα μπορεί να είναι τρομακτικό (και δικαίως έτσι.)


Σήμερα διάβασα μια άλλη [ενδιαφέρουσα θέση](https://stackoverflow.com/questions/4508/mapi-and-managed-code-experiences) με ετικέτα ως MAPI που βρίσκεται σε ένα διαφορετικό θέμα. Το βασικό πράγμα εδώ όμως είναι ότι έχει συνδεθεί με [αυτό το σημαντικό άρθρο MS](http://blogs.msdn.com/mstehle/archive/2007/10/03/fyi-why-are-mapi-and-cdo-1-21-not-supported-in-managed-net-code.aspx) . Έχω αγνοεί τα ζητήματα που μέχρι τώρα σχετικά με τη χρήση του διαχειριζόμενου κώδικα για διεπαφή με MAPI αν και η C ++ κώδικα στο στοιχείο πρέπει να είναι ανεπηρέαστη από αυτό το σφάλμα, όπως είναι χωρίς έλεγχο.


Αυτή η καταχώρηση στο blog προτείνει επίσης άλλοι τρόποι για να συνδεθείτε στο διακομιστή MAPI / Exchange. Σε αυτή την περίπτωση, λόγω αυτών των νέων στοιχείων <http://us3.php.net/imap> μπορεί να είναι η απάντηση, όπως προτείνεται από τον άλλο χρήστη.
ευχαριστω για την απαντηση σου, αλλα δεν ζητησα αυτο, ασε που το βρήκα μονος μου τελικα και παραθετω την λύση του.

εχοντας εγκαταστησει στο κινητο το συγκεκριμενο app “wifimouse”

εγκαθιστούμε και στο mint το σχετικο server που κατεβαζουμε απο την εταιρεια

(ειναι σε zip, απλα αποσυμπιέζουμε και εγ… <p><strong> συνολικά: </strong></p><p>τόσο το put όσο και το post μπορούν να χρησιμοποιηθούν για τη δημιουργία.</p><p>πρέπει να ρωτήσετε "σε τι εκτελείτε τη δράση;" να διακρίνετε τι πρέπει να χρησιμοποιείτε. ας υποθέσουμε ότι σχεδιάζετε ένα api για να κάνετε ερωτήσεις. εάν θέλετε να χρησιμοποιήσετε το post τότε θα το κάνετε σε μια λίστα ερωτήσεων. εάν θέλετε να χρησιμοποιήσετε το put τότε θα το κάνετε αυτό σε μια συγκεκριμένη ερώτηση.</p><p><strong> μεγάλη και οι δύο μπορούν να χρησιμοποιηθούν, έτσι ποιο πρέπει να χρησιμοποιήσω στο restful σχεδιασμό μου: </strong></p><p>δεν χρειάζεται να υποστηρίζετε τόσο το put όσο και το post.</p><p>το οποίο χρησιμοποιείται παραμένει στο χέρι σας. αλλά θυμηθείτε να χρησιμοποιήσετε το σωστό, ανάλογα με το αντικείμενο που αναφέρετε στο αίτημα.</p><p>μερικές σκέψεις:</p><ul> <li>ονομάζετε ρητά τα αντικείμενα url που δημιουργείτε ή αφήστε το διακομιστή να αποφασίσει; εάν τους ονομάσετε τότε χρησιμοποιήστε put. εάν αφήσετε τον διακομιστή να αποφασίσει στη συνέχεια, χρησιμοποιήστε το post.</li> <li>put είναι idempotent, οπότε αν put ένα αντικείμενο δύο φορές, δεν έχει καμία επίδραση. αυτή είναι μια ιδιοκτησία της νίκαιας, οπότε θα μπορούσα να χρησιμοποιήσω το put όταν ήταν δυνατόν.</li> <li>μπορείτε να ενημερώσετε ή να δημιουργήσετε έναν πόρο με put με την ίδια διεύθυνση url αντικειμένου</li> <li>με το post μπορείτε να έχετε 2 αιτήματα που εισέρχονται ταυτόχρονα για τροποποιήσεις σε μια διεύθυνση url και μπορεί να ενημερώσουν διαφορετικά μέρη του αντικειμένου.</li> </ul><p><strong> ένα παράδειγμα: </strong></p><p> <a href="https://stackoverflow.com/questions/256349/what-are-the-best-common-restful-url-verbs-and-actions/256359#256359">έγραψα τα εξής ως μέρος μιας άλλης απάντησης σχετικά με το so</a> :</p><blockquote> <p><strong> post: </strong></p> <p>χρησιμοποιείται για την τροποποίηση και την ενημέρωση ενός πόρου</p> <pre><code>post /questions/&lt;existing\_question&gt; http/1.1 host: www.example.com/ </code></pre> <p>σημειώστε ότι το ακόλουθο είναι ένα σφάλμα:</p> <pre><code>post /questions/&lt;new\_question&gt; http/1.1 host: www.example.com/ </code></pre> <p>εάν η διεύθυνση url δεν έχει δημιουργηθεί ακόμη, δεν θα πρέπει να χρησιμοποιείτε το post για να το δημιουργήσετε ενώ καθορίζετε το όνομα. αυτό θα πρέπει να έχει ως αποτέλεσμα ένα σφάλμα 'πόρος δεν βρέθηκε' επειδή το <code>&lt;new\_question&gt;</code> δεν υπάρχει ακόμα. πρέπει πρώτα να τοποθετήσετε τον πόρο <code>&lt;new\_question&gt;</code> στον διακομιστή.</p> <p>θα μπορούσατε όμως να κάνετε κάτι τέτοιο για να δημιουργήσετε πόρους χρησιμοποιώντας post:</p> <pre><code>post /questions http/1.1 host: www.example.com/ </code></pre> <p>σημειώστε ότι σε αυτήν την περίπτωση το όνομα του πόρου δεν έχει καθοριστεί, η διαδρομή url των νέων αντικειμένων θα σας επιστραφεί.</p> <p><strong> σημειωση: </strong></p> <p>χρησιμοποιείται για τη δημιουργία ενός πόρου ή για την αντικατάστασή του. ενώ ορίσετε τους πόρους νέα διεύθυνση url.</p> <p>για έναν νέο πόρο:</p> <pre><code>put /questions/&lt;new\_question&gt; http/1.1 host: www.example.com/ </code></pre> <p>για να αντικαταστήσετε μια υπάρχουσα πηγή:</p> <pre><code>put /questions/&lt;existing\_question&gt; http/1.1 host: www.example.com/ </code></pre></blockquote> Έχω χρησιμοποιήσει ZendDebugger με Eclipse (σε OS X) για μια στιγμή τώρα και λειτουργεί μεγάλο!


Εδώ είναι η συνταγή που λειτούργησε καλά για μένα.


1. εγκαταστήσετε το Eclipse PDT μέσω του πακέτου «Όλα σε ένα» σε: <http://www.zend.com/en/community/pdt>
2. εγκαταστήστε ZendDebugger.so ( <http://www.zend.com/en/community/pdt> )
3. ρυθμίσετε php.ini σας w / την extenssion ZendDebugger (πληροφορίες παρακάτω)


Ρύθμιση ZendDebugger:


1. edit php.ini
2. προσθέστε το ακόλουθο:


[Zend]   

zend\_extension = / πλήρη / path / to / ZendDebugger.so   

zend\_debugger.allow\_hosts = 127.0.0.1   

zend\_debugger.expose\_remotely = πάντα   

zend\_debugger.connector\_port = 10013


Τώρα τρέχει «php -m» στη γραμμή εντολών για την έξοδο όλες τις εγκατεστημένες μονάδες. Αν δείτε τα ακόλουθα στη συνέχεια να εγκατασταθεί της μια χαρά



```
[Zend Modules]  
Zend Debugger

```

Τώρα, κάντε επανεκκίνηση του Apache έτσι ώστε να φορτώνει PHP w / την ZendDebugger. Δημιουργήστε μια εικονική σελίδα με σε αυτό και να εξετάσει την έξοδο για να βεβαιωθείτε ότι η μονάδα apache PHP πήρε ZendDebugger επίσης. Αν είναι setup δεξιά θα δείτε κάτι σαν το παρακάτω κείμενο κάπου στην phpinfo () 's εξόδου.



> 
> με Zend Debugger v5.2.14, Copyright (c) 1999 - 2008, από την Zend Technologies
> 
> 
> 


OK - αλλά θα ήθελε Aptana στούντιο ... σε αυτό το σημείο μπορώ να εγκαταστήσω το Aptana Studio Plugin στην κατασκευή PDT του Eclipse. Οι οδηγίες που βρίσκονται στο: <http://www.aptana.com/docs/index.php/Plugging_Aptana_into_an_existing_Eclipse_configuration>


Αυτή η ρύθμιση με έχει εξυπηρετήσει καλά για ένα διάστημα - ελπίζουμε να σας βοηθάει πάρα πολύ


-Arin Κάνατε πολύ καλή δουλειά στο να συνοψίσετε τι είναι φοβερό στο Node.js. Η αίσθησή μου είναι ότι το Node.js είναι ιδιαίτερα κατάλληλο για εφαρμογές όπου θα θέλατε να διατηρήσετε μια μόνιμη σύνδεση από το πρόγραμμα περιήγησης πίσω στον διακομιστή. Χρησιμοποιώντας μια τεχνική γνωστή ως ["long-polling"](https://en.wikipedia.org/wiki/Push_technology#Long_polling), μπορείτε να γράψετε μια εφαρμογή που στέλνει ενημερώσεις στον χρήστη σε πραγματικό χρόνο. Η πραγματοποίηση long polling σε πολλούς από τους γίγαντες του διαδικτύου, όπως το [Ruby on Rails](https://en.wikipedia.org/wiki/Ruby_on_Rails) ή το [Django](https://en.wikipedia.org/wiki/Django_%28web_framework%29), θα δημιουργούσε τεράστιο φόρτο στον διακομιστή, επειδή κάθε ενεργός πελάτης τρώει μια διεργασία του διακομιστή. Αυτή η κατάσταση ισοδυναμεί με επίθεση [tarpit](https://en.wikipedia.org/wiki/Tarpit_(networking)). Όταν χρησιμοποιείτε κάτι όπως το Node.js, ο διακομιστής δεν έχει ανάγκη να διατηρεί ξεχωριστά νήματα για κάθε ανοιχτή σύνδεση. 


Αυτό σημαίνει ότι μπορείτε να δημιουργήσετε μια [εφαρμογή συνομιλίας με βάση το πρόγραμμα περιήγησης](https://github.com/rivalslayer/node_chat) σε Node.js που δεν χρειάζεται σχεδόν καθόλου πόρους συστήματος για να εξυπηρετεί πολλούς πελάτες. Κάθε φορά που θέλετε να κάνετε αυτού του είδους τη μακροχρόνια αναζήτηση, το Node.js είναι μια εξαιρετική επιλογή. 


Αξίζει να αναφέρουμε ότι και η Ruby και η Python έχουν εργαλεία για να κάνουν κάτι τέτοιο ([eventmachine](http://rubyeventmachine.com/) και [twisted](https://twistedmatrix.com/trac/), αντίστοιχα), αλλά ότι το Node.js το κάνει εξαιρετικά καλά, και από την αρχή. Η JavaScript είναι εξαιρετικά καλά τοποθετημένη σε ένα μοντέλο ταυτόχρονης λειτουργίας βασισμένο σε callback, και υπερέχει εδώ. Επίσης, η δυνατότητα σειριοποίησης και αποσειριοποίησης με JSON εγγενές τόσο στον πελάτη όσο και στον διακομιστή είναι αρκετά έξυπνη.


Ανυπομονώ να διαβάσω άλλες απαντήσεις εδώ, αυτή είναι μια φανταστική ερώτηση.


Αξίζει να επισημάνουμε ότι το Node.js είναι επίσης εξαιρετικό για καταστάσεις στις οποίες θα επαναχρησιμοποιήσετε πολύ κώδικα σε όλο το χάσμα πελάτη/εξυπηρετητή. Το [Meteor framework](https://meteor.com) το κάνει αυτό πολύ εύκολο, και πολλοί άνθρωποι προτείνουν ότι αυτό μπορεί να είναι το μέλλον της ανάπτυξης ιστοσελίδων. Μπορώ να πω από την εμπειρία μου ότι είναι πολύ διασκεδαστικό να γράφεις κώδικα στο Meteor, και ένα μεγάλο μέρος αυτού είναι να ξοδεύεις λιγότερο χρόνο σκεπτόμενος πώς θα αναδομήσεις τα δεδομένα σου, ώστε ο κώδικας που εκτελείται στο πρόγραμμα περιήγησης να μπορεί εύκολα να τα χειριστεί και να τα μεταβιβάσει πίσω.


Εδώ είναι ένα άρθρο για το Pyramid και το long-polling, το οποίο αποδεικνύεται ότι είναι πολύ εύκολο να ρυθμιστεί με λίγη βοήθεια από το gevent: [*TicTacToe και Long Polling με την Pyramid*](http://michael.merickel.org/2011/6/21/tictactoe-and-long-polling-with-pyramid/). <p>το <strong>server</strong> (που αποστέλλεται το αίτημα post) πρέπει να περιλαμβάνει την κεφαλίδα <code>access-control-allow-headers</code> (κλπ) <strong>στην απάντησή του</strong>. η τοποθέτησή τους στο αίτημά σας από τον πελάτη δεν έχει καμία επίδραση.</p><p>αυτό οφείλεται στο γεγονός ότι εναπόκειται στον διακομιστή να καθορίσει ότι δέχεται αιτήσεις διασταυρούμενης προέλευσης (και ότι επιτρέπει την κεφαλίδα <code>content-type</code> αίτησης και ούτω καθεξής) - ο πελάτης δεν μπορεί να αποφασίσει για τον εαυτό του ότι ένας δεδομένος διακομιστής πρέπει να επιτρέπει την cors.</p> μην πειραξεις τιποτα απλα αλλαξε την ip του εκτυπωτη σε 192.168.1.15 και βαλε αυτη στο cups στον υπολογιστη σου και σε καθε υπολογιστη/συσκευη που θελεις να το χρησιμοποιησεις. μια λύση είναι να χρησιμοποιήσεις την web έκδοση. θέλει chrome που νομίζω υπάρχει ακόμα στα 32bit. Από τα περαιτέρω σχόλια που έγιναν από τον συγγραφέα, που ψάχνουν για ένα Node.js ORM που λειτουργεί με δύο οδηγούς MySQL και Oracle.


Εκεί δεν φαίνεται να είναι πολλά ΝΤΥΠΑ που ταιριάζει η περιγραφή και είναι επίσης υποστηρίζονται (προειδοποίηση - βασίζονται αποκλειστικά σε λίγες αναζητήσεις του Google).


Υπάρχει μία διαπίστωσα ότι ταιριάζει με την περιγραφή αν και ακόμα φαίνεται να υποστηρίζεται ενεργά και ότι είναι knex (βλ <https://knexjs.org> ). **Για την «ορθογραφία λάθος» μέρος (Μήπως εννοείτε)**


* Θα μπορούσατε να κάνετε κάποια `LIKE`ερωτήματα στο db π.χ. `LIKE %j%e%a%n%s%`, αλλά αν θέλετε να το κάνετε καλά, θα πρέπει να χρησιμοποιήσετε μια βιβλιοθήκη αναζήτησης όπως αυτό:


	+ <https://github.com/TomLingham/Laravel-Searchy>
	+ <http://tnt.studio/blog/did-you-mean-functionality-with-laravel-scout>



> 
> Μπορείτε να δημοσιεύσετε το αρχείο ρυθμίσεων στον κατάλογο της εφαρμογής σας και να παρακάμψετε τις ρυθμίσεις, εκτελώντας php τεχνίτη πωλητή: δημοσιεύει για να αντιγράψετε τις ρυθμίσεις στο φάκελο config σας όπως searchy.php
> 
> 
> Μπορείτε να ορίσετε το προεπιλεγμένο πρόγραμμα οδήγησης που θα χρησιμοποιηθεί για τις αναζητήσεις στο αρχείο ρυθμίσεων. Οι επιλογές σας (στην παρούσα φάση) είναι: ασαφή, απλό και Levenshtein.
> 
> 
> Μπορείτε επίσης να παρακάμψετε αυτές τις μεθόδους, χρησιμοποιώντας την ακόλουθη σύνταξη κατά την εκτέλεση μιας αναζήτησης:
> 
> 
> 


Με τον καθορισμό [Levenshtein απόσταση](https://en.wikipedia.org/wiki/Levenshtein_distance) μπορείτε να finetune πόσο μακριά μια λέξη μπορεί να είναι.


* Αν χρειάζεστε καλύτερη απόδοση θα πρέπει να εξετάσει κάτι σαν `solr`ή `elasticsearch`για το έργο αυτό.


<https://wiki.apache.org/solr/SpellCheckComponent>
<https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-fuzzy-query.html>


**Για το τμήμα μετάφρασης**


Απλά θα πρέπει να έχει ένα λεξικό έτοιμο σε βάση δεδομένων ή εντοπισμό των αρχείων σας και εκτελέστε το χαμηλότερο σημείο εισόδου και αυτό. Αναμείνετε υψηλή φορές υπολογιστών τόσο για τη διόρθωση ορθογραφίας και της μετάφρασης στον κώδικά σας. Συχνά αυτό επιτυγχάνεται με τη χρήση [«Driven δεδομένων Συνδρομές»](https://msdn.microsoft.com/en-us/library/ms169673.aspx) , αλλά αυτή η λειτουργία είναι διαθέσιμη μόνο σε ορισμένες εκδόσεις του SQL: Enterprise και Business Intelligence, αλλά όχι στο πρότυπο.


Έτσι, υπάρχει μια σειρά από δημιουργικές λύσεις. Αλλά δεν μου αρέσει κάποια από αυτές, και απαιτούν ένα δίκαιο κομμάτι της εργασίας έξω από SSRS.


Οι λύσεις που έχω δει περιλαμβάνουν: Δημιουργία της εγγραφής και στη συνέχεια απενεργοποίηση ή επιτρέπουν την εργασία SQL που στέλνει τη συνδρομή (που προσδιορίζονται από GUID.)


Δημιουργήστε ένα .exe .NET περιτύλιγμα για να χειριστεί την αποστολή του email. Μπορεί να εκτελέσετε το ερώτημα πρώτα να δούμε πόσα επέστρεψε σειρές, και στη συνέχεια, αν χρειαστεί, να δημιουργήσει την έκθεση και να συμπεριληφθεί σε ένα email.