- Katılım
- 22 Haziran 2009
- Mesajlar
- 165
- Excel Vers. ve Dili
- ofis 365
Arkadaşlar google sheets ile mail göndermek mümkün. Peki gelen mailleri google sheetse script veya formül ile aktarmak mümkün mü ?
DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
Altın Üyelik Hakkında Bilgi
Hüseyin Bey Merhabagoogle sheet de Apps Script’i Açın: Extensions > Apps Script menüsüne bu kodu yapıştırın. Run > Run function > getEmailsToSheet
ile çalıştırın.
function getEmailsToSheet() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var threads = GmailApp.getInboxThreads(0, 10); // İlk 10 e-posta konusunu alır
var row = 1;
threads.forEach(function(thread) {
var messages = thread.getMessages();
messages.forEach(function(message) {
sheet.getRange(row, 1).setValue(message.getDate());
sheet.getRange(row, 2).setValue(message.getFrom());
sheet.getRange(row, 3).setValue(message.getSubject());
sheet.getRange(row, 4).setValue(message.getPlainBody());
row++;
});
});
}
Cem bey merhabadener misiniz ? Yapay zeka ile oluşturuldu.
1-Script Güncellemesi
Aşağıdaki kodu Apps Script’te kullanabilirsiniz. Bu, yalnızca ilk iki satırı alacak ve her yeni e-posta geldiğinde çalışacak şekilde ayarlanmıştır.
function getEmailsToSheet() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var threads = GmailApp.getInboxThreads(0, 10); // İlk 10 e-posta konusunu alır
var row = sheet.getLastRow() + 1; // Mevcut son satırın altına yazmaya başlar
threads.forEach(function(thread) {
var messages = thread.getMessages();
messages.forEach(function(message) {
sheet.getRange(row, 1).setValue(message.getDate());
sheet.getRange(row, 2).setValue(message.getFrom());
sheet.getRange(row, 3).setValue(message.getSubject());
// Mail gövdesinden yalnızca ilk iki satırı al
var body = message.getPlainBody();
var firstTwoLines = body.split('\n').slice(0, 2).join('\n');
sheet.getRange(row, 4).setValue(firstTwoLines);
row++;
});
});
}
2. Tetikleyici Ayarlama
Otomatik çalışması için aşağıdaki adımları izleyerek bir tetikleyici ekleyin:
Artık yeni e-postalar geldiğinde ve belirlediğiniz aralıklarla çalışıyor olmalıdır
- Apps Script ekranında üstteki menüden "Triggers" (Tetikleyiciler) bölümüne gidin.
- Sağ altta "Add Trigger" (Tetikleyici Ekle) butonuna tıklayın.
- "Choose which function to run" (Çalıştırılacak fonksiyonu seçin) kısmında getEmailsToSheet fonksiyonunu seçin.
- "Select event source" (Olay kaynağını seçin) kısmında "Time-driven" (Zamanla çalışan) seçeneğini seçin.
- "Select type of time based trigger" (Zaman tabanlı tetikleyici türünü seçin) kısmında "Minutes timer" (Dakika zamanlayıcısı) seçin ve istediğiniz sıklığı (örneğin her 5 dakikada bir) ayarlayın.
- Tetikleyiciyi kaydedin.
Cem bey bu kodları kullanınca hiç mail aktarmıyor.tekrar dener misiniz ?
Aşağıdaki kod, yalnızca yeni gelen e-postaları aktarır:
var processedMessages = []; // Önceden işlenmiş e-postaları saklamak için dizi
function getEmailsToSheet() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var threads = GmailApp.getInboxThreads(0, 10); // İlk 10 e-posta konusunu alır
var row = sheet.getLastRow() + 1; // Mevcut son satırın altına yazmaya başlar
threads.forEach(function(thread) {
var messages = thread.getMessages();
messages.forEach(function(message) {
// Eğer bu mesaj daha önce işlenmemişse
if (!processedMessages.includes(message.getId())) {
sheet.getRange(row, 1).setValue(message.getDate());
sheet.getRange(row, 2).setValue(message.getFrom());
sheet.getRange(row, 3).setValue(message.getSubject());
// Mail gövdesinden yalnızca ilk iki satırı al
var body = message.getPlainBody();
var firstTwoLines = body.split('\n').slice(0, 2).join('\n');
sheet.getRange(row, 4).setValue(firstTwoLines);
processedMessages.push(message.getId()); // Mesajı işlenmişler listesine ekle
row++;
}
});
});
}
Açıklamalar:
Bu şekilde, yalnızca yeni gelen e-postalar aktarılarak tekrarlanan aktarım önlenmiş olur.
- processedMessages: Daha önce işlenmiş e-postaların kimliklerini saklamak için kullanılan bir dizi.
- if (!processedMessages.includes(message.getId())): Eğer e-posta daha önce işlenmemişse, e-postayı aktarır ve kimliğini processedMessages dizisine ekler.
Tetikleyici Ayarlama:
Zaten tetikleyici ayarladıysanız, bu kodu güncelleyip çalıştırabilirsiniz. Yeni e-posta geldiğinde yalnızca o e-posta aktarılacaktır.
Cem bey aynı hata devam ediyor.Güncellenmiş Kod
Aşağıda, processedMessages dizisini global olarak tanımlandı. Böylece fonksiyon her çalıştığında dizi sıfırlanmayacak ve önceki işlenmiş mesajları saklayabileceksiniz.
var processedMessages = []; // Önceden işlenmiş e-postaları saklamak için dizi
function getEmailsToSheet() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var threads = GmailApp.getInboxThreads(0, 10); // İlk 10 e-posta konusunu alır
var row = sheet.getLastRow() + 1; // Mevcut son satırın altına yazmaya başlar
threads.forEach(function(thread) {
var messages = thread.getMessages();
messages.forEach(function(message) {
// Eğer bu mesaj daha önce işlenmemişse
if (!processedMessages.includes(message.getId())) {
sheet.getRange(row, 1).setValue(message.getDate());
sheet.getRange(row, 2).setValue(message.getFrom());
sheet.getRange(row, 3).setValue(message.getSubject());
// Mail gövdesinden yalnızca ilk iki satırı al
var body = message.getPlainBody();
var firstTwoLines = body.split('\n').slice(0, 2).join('\n');
sheet.getRange(row, 4).setValue(firstTwoLines);
processedMessages.push(message.getId()); // Mesajı işlenmişler listesine ekle
row++;
}
});
});
}
Dikkat Edilmesi Gerekenler
- Global Değişken: processedMessages dizisini fonksiyon dışında tanımlamak, onun tüm fonksiyon çağrılarında erişilebilir olmasını sağlar.
- Uygulama Yeniden Başlatılması: Script’i yeniden çalıştırdığınızda veya Google Sheets'i kapatıp açtığınızda, processedMessages dizisi sıfırlanacaktır. Eğer kalıcı bir çözüm istiyorsanız, mesaj ID'lerini bir veri kaynağında (örneğin, Google Sheets içinde bir hücrede) saklamayı düşünebilirsiniz.
Cem Bey teşekkür ederim.function getEmailsToSheet() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var threads = GmailApp.getInboxThreads(0, 10); // İlk 10 e-posta konusunu alır
var row = sheet.getLastRow() + 1; // Mevcut son satırın altına yazmaya başlar
// İşlenmiş mesaj ID'lerini al
var processedMessages = sheet.getRange("B1").getValue();
if (processedMessages) {
processedMessages = processedMessages.split(","); // ID'leri diziye çevir
} else {
processedMessages = []; // Eğer hücre boşsa, boş dizi oluştur
}
threads.forEach(function(thread) {
var messages = thread.getMessages();
messages.forEach(function(message) {
// Eğer bu mesaj daha önce işlenmemişse
if (!processedMessages.includes(message.getId())) {
sheet.getRange(row, 1).setValue(message.getDate());
sheet.getRange(row, 2).setValue(message.getFrom());
sheet.getRange(row, 3).setValue(message.getSubject());
// Mail gövdesinden yalnızca ilk iki satırı al
var body = message.getPlainBody();
var firstTwoLines = body.split('\n').slice(0, 2).join('\n');
sheet.getRange(row, 4).setValue(firstTwoLines);
processedMessages.push(message.getId()); // Mesajı işlenmişler listesine ekle
row++;
}
});
});
// İşlenmiş mesaj ID'lerini hücreye kaydet
sheet.getRange("B1").setValue(processedMessages.join(",")); // ID'leri virgülle birleştir
}
Açıklamalar
Kullanım
- İşlenmiş Mesajlar: B1 hücresinde saklanan işlenmiş mesaj ID'leri, processedMessages dizisine aktarılır.
- ID'leri Kontrol Etme: Her yeni mesaj işlendiğinde, ID'si kontrol edilir ve işlem yapılmadıysa veriler eklenir.
- Kaydetme: İşlenmiş mesaj ID'leri, B1 hücresine kaydedilir. Bu şekilde, script bir sonraki çalıştırıldığında hangi mesajların işlendiğini bilmiş olur.
Bu yöntemle, aynı mesajları tekrar tekrar işleme almaktan kaçınabilirsiniz.
- Yukarıdaki kodu Google Sheets Apps Script'e yapıştırın.
- Düğmeyi veya script’i çalıştırın. A sütununda e-posta bilgileri yazılacak ve B1 hücresinde işlenmiş mesaj ID'leri saklanacaktır.
Yardım ve bilgiler için Teşekkür ederim. Size de iyi çalışmalar.evet işlemci aşırı ısınabilir ve donmalar yapabilir. Fan da surekli calısır, bu yuzden 5 dk daha dogru olabilir.
Bu arada kolay calısmalar dilerim