erikdal Postad 13 juli, 2021 Share Postad 13 juli, 2021 Hej Har ett speciellt problem med en egenkodad e-postfunktion i ett administrativ system för en förening med flera hundra medlemmar. För att skicka meddelanden till medlemmarna måste utskicket programmässigt delas upp i omgångar på grund av e-postleverantörens krav på ett viss maxantal mottagare per halvtimmesperiod. Nuvarande lösning är att funktionen delar upp sändningen i lämpliga omgångar och avsändaren skickar iväg den första omgången men funktionen ligger kvar aktiv och väntar på att tiden ska gå innan nästa omgång kan sändas. Detta låser ju upp programmet under tiden tills allt är skickat. En bättre lösning vore ju att kunna bygga upp en lista som skulle kunna skickas till en asynkron bakgrundsfunktion som hanterar omgångarna och tidsaspekten. Efter att bakgrundsfunktionen startats ska förgrundsfunktionen släppas fri och bakgrundsfunktionen ska kunna kunna rapportera status när den avslutats. Systemet är kodat i PHP och jag har inte hittat någon metod att åstadkomma önskvärt beteende. Tacksam för idéer ... Länk till kommentar Dela på andra webbplatser More sharing options...
.M Postad 14 juli, 2021 Share Postad 14 juli, 2021 Jag hade nog löst det med schemaläggning i operativsystemet än att försöka hålla reda på sånt själv. Ponera att du har ett schemalagt jobb som körs varje halvtimme, det tar upp en adress-lista och en e-postmall, skickar ett e-brev baserat på mallen till det n-första i listan. Sen kan det ta bort dessa n-stycken adresser. När listan är tom, så finns det inget att skicka och jobbet avslutas utan att göra något. På så vis, när du ska skicka e-brev, så behöver du bara uppdatera mall och lista, så sköts det av sig självt. Dock tappar du feedback på status när allt skickats iväg men det kan man lösa genom att låta jobbet logga och loggen kan du läsa när du och hur du vill. Cluster reagerade på detta 1 Länk till kommentar Dela på andra webbplatser More sharing options...
MuMu Postad 14 juli, 2021 Share Postad 14 juli, 2021 (redigerade) Jag har gjort motsvarande lösning i andra scriptspråk. Enklast var att ta reda på begränsning för antal skickade mejl per timme och sedan lägga in en vänta-timer i loopen som skickar mejl. Om jag får skicka max 500 mejl per timme (=3600 sekunder/ 500 mejl) så väntar jag 8 sekunder mellan varje mejl, typ: for ($i=0; $i <= $antal_mejl; $i++) { Kod för att skicka mejl här } sleep(8); // fördröjer nästa vända i loopen med 8 sekunder } Nu är det 20 år sen jag kodade PHP, men nåt i den stilen borde funka. Om det finns en begränsning för antal skickade mejl per dygn så går ju även det att hantera i loopen genom att man väntar 86400 sekunder när $i når dygnsbegränsningen och sedan väntar 8 sekunder igen efter det. Redigerad 14 juli, 2021 av MuMu Länk till kommentar Dela på andra webbplatser More sharing options...
Solution erikdal Postad 14 juli, 2021 Trådskapare Solution Share Postad 14 juli, 2021 Hej Tack för tipsen. Nja, sleep()-metoden fungerar inte då PHP-skripten har en max exekveringstid. Efter att ha kontaktat webbhotellet fick jag även därifrån tips om att använda ett schemalagt jobb, så det är ett spår jag ska jobba vidare med. Länk till kommentar Dela på andra webbplatser More sharing options...
Rekommendera Poster