2015-10-01 9 views
6

यह पहली स्क्रिप्ट है जिसे मैं स्क्रैच से लिखने का प्रयास करता हूं। अब तक कोई अच्छा नहीं रहा है इसलिए मैं कुछ मदद मांगने जा रहा हूं।Google Apps स्क्रिप्ट्स - जीमेल से स्प्रेडशीट में डेटा निकालें

केस: मैं ई-कॉमर्स साइट्स से ई-कॉमर्स पुष्टिकरण ईमेल प्राप्त करता हूं, कोई जवाब ईमेल पता नहीं। ईमेल के शरीर में वे खरीदारों से ईमेल पता भेजते हैं। मैं शरीर के ईमेल पते पर एक स्वचालित मेल भेजना चाहता हूं।

मैं यह कैसे करने की योजना बना रहा हूं (चरणों को खत्म करने के लिए कोई भी शर्करा धन्यवाद दिया जाएगा)।

  1. आने वाले ईमेल को एक अद्वितीय टैग के साथ टैग करने के लिए नियम का उपयोग करें।

  2. किसी टैग के साथ जीमेल में ईमेल की पहचान करने के लिए उस टैग का उपयोग करें, एक-एक करके जाएं और मुझे आवश्यक जानकारी निकालें। स्वचालित ईमेल भेजने के लिए आवश्यक ईमेल पते निकालने के लिए ईमेल बॉडी सामग्री के साथ रेगेक्स का उपयोग करें। योजना प्राप्त करना है: विषय, तिथि, शरीर से ईमेल।

  3. वह जानकारी स्प्रेडशीट पर लिखें।

  4. डुप्लिकेट रन को रोकने के लिए अद्वितीय टैग जानकारी से छुटकारा पाएं।

  5. फिर स्प्रेडशीट से ईमेल भेजने के लिए फॉर्म mule addon का उपयोग करें।

अब तक, मैं चरण 1 (आसान) के साथ पेश किया है, और चरण 2 और 3 (आईएम नहीं एक सांकेतिक शब्दों में बदलनेवाला के साथ stuggling दिया, मैं पढ़ सकते हैं, undestrand और हैक। खरोंच से लेखन एक पूरी तरह से अलग है चीज़)। इससे पहले कि मुझे लगता है कि इससे निपटने का यह सबसे अच्छा तरीका है, मैंने 4 से निपटाया।

स्क्रिप्ट के साथ मैं स्प्रेडशीट को जानकारी निकालता हूं, एडन के साथ मैं ईमेल भेजने के लिए स्प्रेडशीट से जानकारी का उपयोग करता हूं।

यह अब तक लिखा गया कोड ive है। मैंने बाद में कारण के लिए रेगेक्स भाग छोड़ा है, मैं अभी तक स्प्रेडशीट में कुछ भी लिख नहीं सकता हूं। एक बार जब मैं यह काम करता हूं, बीमार रेगेक्स में काम करना शुरू कर देता है और स्क्रिप्ट के पहलुओं को "लेबल हटा दें"।

function myFunction() { 
    function getemails() { 
    var label = GmailApp.getUserLabelByName("Main tag/subtag"); 
    var threads = label.getThreads(); 
    for (var i = 0; i < threads.length; i++) { 
    var messages=threads[i].getMessages(); 
     for (var j = 0; j < messages.length; j++) { 
    var message=messages[j]; 
    var subject=message.getSubject(); 
    tosp(message); 
     } 
    } 
    } 

    function tosp(message){ 
    var body=message.getBody() 
    var date=message.getDate(); 
    var subject=message.getSubject(); 
    var id= "my spreasheet id"; 
    var ss = SpreadsheetApp.openById(id); 
    var sheet = ss.getActiveSheet(); 
    sheet.appendRow(subject,date,body);  

} 
} 

किसी भी मदद की सराहना की जाएगी।

धन्यवाद सेबस्टियन

उत्तर

15

के बाद कोड है मैंने लिखा और परीक्षण किया है कि चरण 2, 3 और 4 पूरी तरह से अच्छी तरह से आप ने उल्लेख किया प्रदर्शन करती है।

function myFunction() { 

    var ss = SpreadsheetApp.getActiveSheet(); 

    var label = GmailApp.getUserLabelByName("MyLabel"); 
    var threads = label.getThreads(); 

    for (var i=0; i<threads.length; i++) 
    { 
    var messages = threads[i].getMessages(); 

    for (var j=0; j<messages.length; j++) 
    { 
     var msg = messages[j].getBody(); 
     var sub = messages[j].getSubject(); 
     var dat = messages[j].getDate(); 

     ss.appendRow([msg, sub, dat]) 
    } 
     threads[i].removeLabel(label); 
    } 
} 

अपने कोड में दोष यह है कि appendRow समारोह [ ] कोष्ठक में निर्दिष्ट तत्वों की एक सरणी स्वीकार करता था।

जहां आप इस स्क्रिप्ट संलग्न कर रहे हैं पर निर्भर करता है, कोड की अपनी लाइन:

var ss = SpreadsheetApp.openById(id); 

आवश्यक हो तो स्क्रिप्ट स्प्रेडशीट जहाँ आप चाहते हैं लॉग इन करने की इन ईमेल की स्क्रिप्ट संपादक में लिखा जा रहा है नहीं है ।हालांकि, यदि कोई उस स्प्रैडशीट में एकाधिक पत्रक हैं, तुम मेरे लाइन

var ss = SpreadsheetApp.getActiveSheet(); 

द्वारा

var ss = SpreadsheetApp.getActiveSpreadsheet(); 
var sheet = ss.getSheetByName("Sheet1"); 

एक और सुझाव है कि वर्तमान कोड आप HTML स्वरूप में संदेशों दे देंगे बदल सकते हैं। इसलिए, आप सादे पाठ में संदेश प्राप्त करने के रूप में आप इसे देख, चाहते हैं का उपयोग करें:

var msg = messages[i].getPlainBody(); 

अब आप regex के लिए एक और समारोह लिख सकते हैं और संदेश यह है कि करने के लिए msg पारित कर सकते हैं। उम्मीद है की यह मदद करेगा!

+0

इस तरह की एक अच्छी और विस्तृत व्याख्या! मैं बस 'प्वाइंट एनक्लिक' तक अंगूठे दिए बिना पास नहीं कर सका! – Zongjun

+0

@pointNclick, क्षमा करें पुराना धागा। लेकिन जवाब देने में मदद नहीं कर सका .... मेरे पास जीमेल में एक लेबल में 5000+ संदेश (धागे) हैं। लेकिन उपर्युक्त कोड केवल Google स्प्रेडशीट में 524 संदेशों को सूचीबद्ध करता है। डीबग मोड के तहत थ्रेड। लम्बाई केवल 500 दिखाता है। कारण क्या हो सकता है? – sifar786

संबंधित मुद्दे